7

フレームワークに求めているのは多すぎると思います。しかし、それがまったく可能かどうかは疑問です。または、これに対する回避策は何ですか。

新しいリリースの 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 型の適切なシリアル化を実現するにはどうすればよいですか?

4

1 に答える 1