2015-04-16 21 views
9

Xem xét F # đoạn dưới đây:serializing F # Lựa chọn loại

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} 

Tôi muốn làm serialize loại này sử dụng JSON.NET vì vậy tôi có được chuỗi kí tự sau lần lượt cho các trường hợp đã nêu ở trên:

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

Về cơ bản, vấn đề nảy sinh khi có thể bao gồm/loại trừ một thuộc tính trong đầu ra tuần tự dựa trên giá trị của thuộc tính đó.

Tôi đã tìm thấy một vài "OptionConverters" (ví dụ: here), nhưng chúng dường như không làm những gì tôi đang tìm kiếm.

Trả lời

2

Tôi muốn giới thiệu bộ chuyển đổi FifteenBelow của mà làm việc với JSON.NET nhưng cung cấp serialization F # loại https://github.com/15below/FifteenBelow.Json

Từ phần sử dụng của họ

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) 

Cụ thể những gì bạn đang tìm kiếm là các bit NullValueHandling = NullValueHandling.Ignore.

Các vấn đề liên quan