F#通用功能

时间:2017-04-18 19:07:16

标签: .net json f#

piping to/from net objects

中的

我了解到我可以做到这一点:

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#

1 个答案:

答案 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上指定通用参数,因为它具有非泛型重载,如果您不指定任何内容,将会选择该重载。