2015-04-16 5 views
9

Rozważmy F # fragment poniżej:szeregowania F # typów opcji

type MyType = { 
    CrucialProperty: int 
    OptionalProperty: string option 
} 

let first = { CrucialProperty = 500; OptionalProperty = Some("Hello")} 
let second = { CrucialProperty = 500; OptionalProperty = Some(null)} 
let third = { CrucialProperty = 500; OptionalProperty = None} 

pragnę zrobić serializacji tego typu przy użyciu JSON.NET więc mam następujące ciągi odpowiednio do wyżej opisanych przypadkach:

{"CrucialProperty":500,"OptionalProperty":"Hello"} 
{"CrucialProperty":500,"OptionalProperty":null} 
{"CrucialProperty":500} 

Zasadniczo problem sprowadza się do możliwości włączenia/wyłączenia właściwości w serializowanym wyniku na podstawie wartości tej właściwości.

Udało mi się znaleźć kilka "OptionConverters" (np. here), ale nie wydają się robić tego, czego szukam.

Odpowiedz

2

Polecam konwertery FifteenBelow, które współpracują z Json.NET ale zapewniają serializacji F # Rodzaje https://github.com/15below/FifteenBelow.Json

Z ich części użytkowania

let converters = 
    [ OptionConverter() :> JsonConverter 
     TupleConverter() :> JsonConverter 
     ListConverter() :> JsonConverter 
     MapConverter() :> JsonConverter 
     BoxedMapConverter() :> JsonConverter 
     UnionConverter() :> JsonConverter ] |> List.toArray :> IList<JsonConverter> 

let settings = 
    JsonSerializerSettings (
     ContractResolver = CamelCasePropertyNamesContractResolver(), 
     Converters = converters, 
     Formatting = Formatting.Indented, 
     NullValueHandling = NullValueHandling.Ignore) 

Konkretnie czego szukasz The NullValueHandling = NullValueHandling.Ignore bit.