私がやっていることはうまくいくはずだということを示しているように見える多くの例を見てきましたが、どういうわけか、うまくいきません。次のように、オブジェクトのコレクションを逆シリアル化しようとしています。そのプロパティの1つはディクショナリです。
class Program
{
static void Main(string[] args)
{
var json = "{\"Collection\":[{\"ID\":\"1243\",\"Dictionary\":[{\"Key\":\"color\", \"Value\":\"red\"},{\"Key\":\"size\",\"Value\":\"large\"}]},{\"ID\":\"1243\",\"Dictionary\":[{\"Key\":\"color\", \"Value\":\"blue\"},{\"Key\":\"size\",\"Value\":\"small\"}]}]}";
//var json = "[{\"ID\":\"1243\",\"Dictionary\":[{\"Key\":\"color\", \"Value\":\"red\"},{\"Key\":\"size\",\"Value\":\"large\"}]},{\"ID\":\"1243\",\"Dictionary\":[{\"Key\":\"color\", \"Value\":\"blue\"},{\"Key\":\"size\",\"Value\":\"small\"}]}]";
List<MyObject> myObjects = new JavaScriptSerializer().Deserialize<List<MyObject>>(json);
}
}
[DataContract]
public class MyObject
{
[DataMember]
public string ID { get; set; }
[DataMember]
public Dictionary<string, string> Dictionary { get; set; }
}
最初のjson文字列は、すべてをオブジェクトにカプセル化します。これを実行すると、正常に実行されますが、myObjectsは単なる空のリストです。2番目の文字列を(ラップせずに)実行すると、次のエラーが発生します。
タイプ'System.Collections.Generic.Dictionary`2[[System.String、mscorlib、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = b77a5c561934e089]、[System.String、mscorlib、Version = 4.0.0.0、Culture = neutral 、PublicKeyToken = b77a5c561934e089]]'は、配列の逆シリアル化ではサポートされていません。
私が行った調査によると、これは非常に簡単なはずです。どのJSON形式を使用すべきか、何が問題になっているのかについて、誰かが何か考えを持っていますか?オブジェクトの配列ではなく1つのオブジェクトを実行するだけで、JSONは正常に逆シリアル化されます。