次のクラスを使用して JSON を作成しました。
public class Detail
{
public bool Correct { get; set; }
public bool Response { get; set; }
public HtmlText Text { get; set; }
public string ImageFile { get; set; }
public HtmlText Explanation { get; set; }
}
これを次のようにデシリアライズしたいと思います:
public class Answer
{
public bool Correct { get; set; }
public bool Response { get; set; }
public string Text { get; set; }
public string ImageFile { get; set; }
public string Explanation { get; set; }
}
これを行うには、次のものがあります。
public static string ToJSONString(this object obj)
{
using (var stream = new MemoryStream())
{
var ser = new DataContractJsonSerializer(obj.GetType());
ser.WriteObject(stream, obj);
return Encoding.UTF8.GetString(stream.ToArray());
}
}
これが私のデータのサンプルです:
[
{"Correct":false,
"Explanation":{"TextWithHtml":null},
"ImageFile":null,
"Response":false,
"Text":{"TextWithHtml":"-1 1 -16 4"}
},
{"Correct":false,
"Explanation":{"TextWithHtml":null},
"ImageFile":null,
"Response":false,
"Text":{"TextWithHtml":"1 -1 -4 16"}
},
{"Correct":false,
"Explanation":{"TextWithHtml":null},
"ImageFile":null,
"Response":false,
"Text":{"TextWithHtml":"1 -1 4 2147483644"}
}]
と私のコード:
IList<Answer> answers = JSON.FromJSONString<List<Answer>>(detailsJSON)
次のようなエラーメッセージが表示されます。
{"There was an error deserializing the object of type
System.Collections.Generic.List`1[[Answer, Models, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].
End element 'Explanation' from namespace '' expected. Found element 'TextWithHtml' from namespace ''."}
System.Exception {System.Runtime.Serialization.SerializationException}
これを変更して、HtmlText を通常の文字列に配置する簡単な方法はありますか?