Как сериализовать частные случаи дискриминационного объединения F # с Newtonsoft.Json? - PullRequest
0 голосов
/ 07 декабря 2018

Когда у меня есть такой код ниже:

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 голосов
/ 08 декабря 2018
[<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
...