Json Deserialize не удается - PullRequest
       2

Json Deserialize не удается

0 голосов
/ 31 декабря 2010

Может кто-нибудь объяснить мне, почему метод десериализации не работает?

        [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 голосов
/ 05 января 2011

Я нашел решение в этом посте

Сериализация динамических объектов Он основан на Json.Net, но это не имеет большого значения

0 голосов
/ 31 декабря 2010

Кажется, что 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>>, но я полагаю, это не очень полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...