我见过很多例子,似乎表明我所做的事情应该有效,但无论出于何种原因,它都不起作用。我正在尝试反序列化对象的集合,其中一个属性是字典,如下所示:
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 只是一个空列表。如果我运行第二个字符串(没有被包装),我会收到以下错误:
类型 'System.Collections.Generic.Dictionary`2[[System.String,
mscorlib,版本=4.0.0.0,文化=中性,
PublicKeyToken = b77a5c561934e089],[System.String,mscorlib,
版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089]]'
不支持数组的反序列化。
从我所做的研究来看,这似乎应该非常简单 - 任何人都知道我应该使用哪种 JSON 格式以及出了什么问题?如果我只处理一个对象而不是一组对象,则 JSON 反序列化效果很好。