Json反序列化失败

时间:2010-12-31 11:54:46

标签: asp.net-mvc json

可以请有人解释为什么反序列化方法失败了吗?

        [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"));
        }

2 个答案:

答案 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,但这不是什么大问题