在 F# 中,任何数据
都可以通过函数 sprintf
进行字符串化
,如下所示:
type someKindOfDataType = ...
let data : someKindOfDataType = ...
sprintf "%A" data
我们可以有一个反转函数来将字符串解析回 someKindOfDataType
,如下所示:?
let parse<'someKingOfDataType> (s:string) : someKindOfDataType = ....
就像 JavaScript 中的 JSON.parse 一样?
最佳答案
您正在描述通常所说的序列化 - 从内存中的数据结构转换为可以通过网络传输的表示形式,可以是 XML、JSON、二进制等。 - 和反序列化 - 相反。
sprintf "%A"
旨在提供方便的数据可视化表示,通常仅用于开发目的,而不是用于生产。它实际上并不进行序列化,因为无法反序列化。
如果您想将 F# 数据序列化为字符串,我建议通过库使用 JSON,例如 Newtonsoft.Json .
请注意,这不会产生与 F# 源代码类似的字符串,如 sprintf "%A"
那样,因为目的不同。一个例子:
Newtonsoft.Json.JsonConvert.SerializeObject [|Some 3; None|]
// """[{"Case":"Some","Fields":[3]},null]"""
Newtonsoft.Json.JsonConvert.DeserializeObject<int option []> """[{"Case":"Some","Fields":[3]},null]"""
// [|Some 3; None|]
您需要提供要反序列化的类型,如果字符串不表示该类型的有效实例,则此操作可能会引发异常。
关于f# - 如何将字符串解析为任何 F# 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46455400/