【问题标题】:Json Deserialize fails [duplicate]Json反序列化失败[重复]
【发布时间】: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"));
        }

【问题讨论】:

    标签: asp.net-mvc json


    【解决方案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;,但我认为这不是非常有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多