Json反序列化失败[重复]
Posted
技术标签:
【中文标题】Json反序列化失败[重复]【英文标题】:Json Deserialize fails [duplicate] 【发布时间】:2010-12-31 11:54:45 【问题描述】:请有人解释一下为什么反序列化方法会失败?
[Test]
public void Serialize_Deserialize_ExpandObject()
dynamic obj = new ExpandoObject();
obj.Name = "Claudio";
obj.Age = 32;
javascriptSerializer ser = new JavaScriptSerializer();
string json = ser.Serialize(obj as IDictionary<string, object>);
Console.WriteLine(json);
IDictionary<string, object> deserialize = ser.Deserialize<IDictionary<string, object>>(json);
Assert.IsTrue(deserialize.ContainsKey("Name"));
Assert.IsTrue(deserialize.ContainsKey("Age"));
【问题讨论】:
【参考方案1】:似乎 ExpandoObject 被序列化为(字典)数组而不是字典。
它被序列化为["Key":"Name","Value":"Claudio","Key":"Age","Value":32]
而不是"Name":"Claudio","Age":32
我猜 ExpandoObject 还实现了一些其他接口,例如 IEnumerable(以及 IDictionary),因此 Serialize 方法将其视为数组。演员表 (as IDictionary<string, object>
) 没有任何区别,因为它实际上并没有改变传递给 Serialize 方法的内容。但这一切似乎与文档 http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx 相矛盾。
您可以反序列化为List<IDictionary<string, object>>
,但我认为这不是非常有用。
【讨论】:
以上是关于Json反序列化失败[重复]的主要内容,如果未能解决你的问题,请参考以下文章