Serializando os tipos de opção F #

9

Considere o fragmento F # abaixo:

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}

Desejo serializar esse tipo usando o JSON.NET para obter as seguintes strings respectivamente para os casos descritos acima:

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

Essencialmente, o problema resume-se a incluir / excluir uma propriedade na saída serializada com base no valor dessa propriedade.

Eu consegui encontrar alguns "OptionConverters" por aí (por exemplo, aqui ), mas eles não parecem fazer exatamente o que eu estou procurando.

    
por Lawrence 16.04.2015 в 14:43
fonte

1 resposta

2

Eu recomendaria os conversores do FifteenBelow que funcionem com o JSON.NET, mas forneçam tipos de serialização F # link

De sua seção de uso

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)

Especificamente, o que você está procurando é o NullValueHandling = NullValueHandling.Ignore bit.

    
por Reid Evans 29.05.2015 / 17:49
fonte