可以请有人解释为什么反序列化方法失败了吗?
[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"));
}
答案 0 :(得分:0)
似乎ExpandoObject被序列化为一个数组(字典)而不是字典。
它被序列化为[{"Key":"Name","Value":"Claudio"},{"Key":"Age","Value":32}]
而不是{"Name":"Claudio","Age":32}
我猜有一些其他接口,ExpandoObject实现像IEnumerable(以及IDictionary&lt;&gt;),所以Serialize方法将其视为一个数组。强制转换(as IDictionary<string, object>
)没有任何区别,因为它实际上并没有改变传递给Serialize方法的内容。但这一切似乎都与文档http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx相矛盾。
您可以反序列化为List<IDictionary<string, object>>
,但我认为这不是非常有用。
答案 1 :(得分:0)
我在这篇文章中找到了解决方案
Dynamic Object Serialization 它基于Json.Net,但这不是什么大问题