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&lt;string, object&gt;) 没有任何区别,因为它实际上并没有改变传递给 Serialize 方法的内容。但这一切似乎与文档 http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx 相矛盾。

您可以反序列化为List&lt;IDictionary&lt;string, object&gt;&gt;,但我认为这不是非常有用。

【讨论】:

以上是关于Json反序列化失败[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从 JSON 反序列化重复字典

IOS JSON 反序列化失败 - STIG/NSJSONSerializer

当链接器设置为全部链接时,JSON 反序列化失败

Unity Json反/序列化嵌套数据[重复]

具有堆栈结构的 JSON 反序列化反转顺序 [重复]

使用嵌套对象中的属性反序列化 JSON [重复]