我了解到我可以做到这一点:
let jsonDeserialize json = JsonConvert.DeserializeObject<Dictionary<System.String, System.String>>(json)
然后将管道序列化的Json Key / Value对管道化为jsonDeserialize。它运作良好。我的下一个问题是我可以将调用泛化为JsonConvert.DeserializeObject吗?我想使用它,以便我可以反序列化为具有相同功能的其他类型。
我试过
let jsonDeserialize json mytype : 'a = JsonConvert.DeserializeObject<'a>(json)
然后无法弄清楚如何使用它。给定一个序列化的JSON字符串,我想
let jsDeser =
jsonSerialized
|> jsonDeserialize Dictionary<string, string>
或类似的东西,在惯用的F#
中答案 0 :(得分:3)
在F#中,指定了类型参数并在尖括号中传递:
let jsonSerialize<'mytype> json : 'mytype = JsonConvert.DeserializeObject<'mytype> json
let jsDeser = jsonSerialized |> jsonDeserialize<Dictionary<string, string>>
或者,最好,根本不指定它们,但让编译器从上下文中找出它们:
let jsonSerialize json = JsonConvert.DeserializeObject<'a> json
let jsDeser : Dictionary<string, string> = jsonDeserialize jsonSerialized
注意:您必须在JsonConvert.DeserializeObject
上指定通用参数,因为它具有非泛型重载,如果您不指定任何内容,将会选择该重载。