JSON文字列から返される型Header option
のレコードメンバーをデシリアライズしようとすると、私は次の例外を取得:デシリアライズオプション<'a>
データ契約タイプ 「Microsoft.FSharp.Core.FSharpOption`1を[必要な データメンバー 'value'が見つかりませんでしたので、[MyWeb.Controllers.Header、 MyWeb.Controllers、Version = 0.0.0.0、Culture = neutral、 PublicKeyToken = null]] 'をデシリアライズできません。
私はMessage
記録デシリアライズ/シリアライズだ:私はJSONをデシリアライズするために使用
[<DataContract>]
type Header =
{ [<DataMember>] mutable ID : int
[<DataMember>] mutable Description : string }
[<DataContract>]
type Message =
{ [<DataMember>] mutable ID : int
[<DataMember>] mutable Header : Header option
[<DataMember>] mutable SenderID : string
[<DataMember>] mutable ReceiverID : string }
コード:
let deserializeJson<'a> (s:string) =
use ms = new MemoryStream(ASCIIEncoding.ASCII.GetBytes s)
let serialize = DataContractJsonSerializer(typeof<'a>)
serialize.ReadObject ms :?> 'a
そして、実際の生のJSONの結果:
"Message":
{
"ID":13,
"Header": { "Value":{"ID":21,"Description":"some"}},
"SenderID":"312345332423",
"ReceiverID":"16564543423"
}
を
質問:どのように私は0123を逆直列化するのですか??
更新
ASP.NET MVCは、オブジェクトをシリアル化するために、デフォルトでJavaScriptSerializer
を使用し、私はデシリアライズするDataContractJsonSerializer
を使用しています。
何らかの理由で、Value
プロパティが小文字(@svickで指摘されている)でない限り、DataContractJsonSerializer
はJSON文字列を読み取れないようです。汚れた修正は返されたJSON文字列の "Value"を "value"に置き換えることですが、私はRobertsの提案に従うことにしました。
JSON文字列はどのように見えますか? – svick
@svick、更新を参照してください。 – ebb
そしてどうやってそれを直列化しますか?明白な方法は私のために例外を投げる。また、 'deserializeJson'を実行しているときと同じ例外があります(設定されたアクセサがないという不満)。 – svick