Разбор JSON-объектов в c # - PullRequest
       13

Разбор JSON-объектов в c #

5 голосов
/ 01 февраля 2010

Я пытаюсь использовать пример в этой ссылке http://sharpdevpt.blogspot.com/2009/10/deserialize-json-on-c.html?showComment=1265045828773#c2497312518008004159

Но мой проект не будет компилироваться с использованием JavaScriptConvert.DeserializeObject, в примере сказано, что это из библиотеки .net, кто-нибудь знает, какая именно?

Я знаю, что в примере ниже используется Newtonsoft.Json ....

Ответы [ 6 ]

9 голосов
/ 01 февраля 2010

Сериализатор Javascript в .NET является частью пространства имен System.Web.Script.Serialization.

Вот пример метода расширения, который я использую для десериализации строк:

public static T FromJSON<T>(this string json)
 {
            JavaScriptSerializer jss = new JavaScriptSerializer();

            return jss.Deserialize<T>(json);
 }

Поскольку это метод расширения string, вы можете использовать его для любой строки.

MyCustomType = myJsonString.FromJSON<MyCustomType>();
5 голосов
/ 01 февраля 2010

Возможно, вы также захотите взглянуть на JSON.NET , который является бесплатным проектом с открытым исходным кодом, и он намного быстрее встроенных сериализаторов .NET JSON, и он также доступно в .NET 1.x и 2.0, если вам все еще требуется их поддержка.

Это действительно изумительное программное обеспечение! Настоятельно рекомендуется.

2 голосов
/ 09 февраля 2010

Но с этим фрагментом кода вы не сможете десериализовать / сериализовать List <>, что очень удобно в случае обработки наборов результатов и более производительно, чем встроенный в .NET .JavascriptSerializer, поэтому Newtonsoft.Json лучший вариант:

Для одного объекта вашего пользовательского типа:

classtype myDeserializedObj = (classtype)JavaScriptConvert.DeserializeObject(jsonString, typeof(classtype));       

Список объектов вашего пользовательского типа:

List<classtype> myDeserializedObjList = (List<classtype>)Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString, typeof(List<classtype>));
2 голосов
/ 04 февраля 2010

Ссылка, которую вы разместили, с моего блога, в чем проблема с ее использованием? не стесняйтесь ответить на сообщение в блоге или напишите мне на ricmrodrigues@gmail.com. Я давно пользуюсь и все отлично работает.

О обсуждаемом JavascriptSerializer, который встроен в .Net Framework, проблема в том, что этот сериализатор не сериализуется в / из List <>. Если вы хотите сделать это, вам нужно использовать Newtonsoft.JSON, потому что .NET Framework просто не поддерживает это. И поскольку основное использование для этого - возвращать JSON в некоторый клиентский скрипт, для поиска или чего-либо еще, вещь List <> является обязательной.

1 голос
/ 26 марта 2011

Проблема в том, что Newtonsoft.Json не может обработать встроенное регулярное выражение в строке. Он думает, что \ (это плохая escape-последовательность. Это поднимает вопрос: какое дело для Newtonsoft заглядывать внутрь строки в кавычках?

0 голосов
/ 01 февраля 2010

Для простого способа десериализации http://blogs.msdn.com/rakkimk/archive/2009/01/30/asp-net-json-serialization-and-deserialization.aspx

JavaScriptSerializer js = new JavaScriptSerializer();
Person p2 = js.Deserialize<classtype>(str);
...