代码之家  ›  专栏  ›  技术社区  ›  Onur Gumus

如何用Newtonsoft.Json序列化F#的私有歧视联合案例?

  •  2
  • Onur Gumus  · 技术社区  · 6 年前

    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 回复  |  直到 6 年前
        1
  •  2
  •   Onur Gumus    6 年前
    [<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