フレームワークに求めているのは多すぎると思います。しかし、それがまったく可能かどうかは疑問です。または、これに対する回避策は何ですか。
新しいリリースの JSON.Net は、F# ユニオン タイプのサポートを開始しました。その回避策は何ですか。つまり、servicestack.text を使用している場合、シリアル化をサポートするためにユニオン型をフラット化するにはどうすればよいでしょうか。
両方のコードサンプルを次に示します。
type Shape =
| Rectangle of width : float * length : float
| Circle of radius : float
| Empty
[<EntryPoint>]
let main argv =
// printfn "%A" argv
let shape1 = Rectangle(1.3, 10.0)
let json = JsonConvert.SerializeObject(shape1) //JSON.net
printfn "%A" json
// {
// "Case": "Rectangle",
// "Fields": [
// 1.3,
// 10.0
// ]
// }
let shape2 = JsonConvert.DeserializeObject<Shape>(json) //JSON.Net
printfn "%A" (shape2 = shape1) //true
let sJson = JsonSerializer.SerializeToString shape1 //SS.Text
printfn "%A" sJson
let sShape2 = JsonSerializer.DeserializeFromString sJson //SS.Text
printfn "%A" (sShape2 = shape1) //false
Console.Read() |> ignore
0 // return an integer exit code
servicestack を使用したデシリアライズは false を返します。また、生成される json 文字列は、JSON.net と比較して非常に複雑です。
Union 型の適切なシリアル化を実現するにはどうすればよいですか?