如何使用Newtonsoft.Json序列化F#的私人歧视工会案例?

时间:2018-12-07 19:38:18

标签: f# json.net

当我在下面有这样的代码时:

open Newtonsoft.Json
type Foo = Bar of string
let f = Bar "f"
printfn "%A" <| JsonConvert.SerializeObject(f)

Foo已成功序列化。

但是,如果我将构造函数设为私有的话:

open Newtonsoft.Json
type Foo = private Bar of string
let f = Bar "f"
printfn "%A" <|  JsonConvert.SerializeObject(f)

然后,Newtonsoft.Json将结果序列化为一个空对象。如何配置Newtonsoft.Json,以便它可以成功地序列化和反序列化私人案例?

1 个答案:

答案 0 :(得分:2)

[<JsonObject(MemberSerialization = MemberSerialization.Fields)>]

需要在该类型的顶部添加。所以下面的代码可以正常工作:

open Newtonsoft.Json
[<JsonObject(MemberSerialization = MemberSerialization.Fields)>]
type Foo =  private Bar of string
let f = Bar "f"
let s = JsonConvert.SerializeObject(f)
let f2 = JsonConvert.DeserializeObject<Foo>(s)

printf "%A" f2