Строка Parse Json в C #

Я пытаюсь прочитать строку Json в C #, но мне трудно понять, как разбирать строку в C #. Скажем, у меня есть следующая строка Json

[ { "AppName": { "Description": "Lorem ipsum dolor sit amet", "Value": "1" }, "AnotherAppName": { "Description": "consectetur adipisicing elit", "Value": "String" }, "ThirdAppName": { "Description": "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", "Value": "Text" }, "Application": { "Description": "Ut enim ad minim veniam", "Value": "100" }, "LastAppName": { "Description": "quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat", "Value": "ZZZ" } } ] 

Я хочу разобрать это в arraylist или словаре, используя формат, подобный

 descriptionList["AppName"] = "Lorem ipsum dolor sit amet"; valueList["AppName"] = "1"; 

Я играл с Json.Net, но примеры, которые я видел, не дают мне четкого представления о том, как я должен это делать. Каков наилучший способ достичь этого? Не могу ли это сделать, как в jQuery, используя инструкцию foreach?

Я использую Json.net в своем проекте, и он отлично работает. В этом случае вы можете сделать это, чтобы проанализировать ваш json:

EDIT: я изменил код, чтобы он поддерживал чтение вашего json-файла (массива)

Код для parsingа:

 void Main() { var json = System.IO.File.ReadAllText(@"d:\test.json"); var objects = JArray.Parse(json); // parse as array foreach(JObject root in objects) { foreach(KeyValuePair app in root) { var appName = app.Key; var description = (String)app.Value["Description"]; var value = (String)app.Value["Value"]; Console.WriteLine(appName); Console.WriteLine(description); Console.WriteLine(value); Console.WriteLine("\n"); } } } 

Вывод:

 AppName Lorem ipsum dolor sit amet 1 AnotherAppName consectetur adipisicing elit String ThirdAppName sed do eiusmod tempor incididunt ut labore et dolore magna aliqua Text Application Ut enim ad minim veniam 100 LastAppName quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat ZZZ 

Кстати, вы можете использовать LinqPad для тестирования вашего кода, проще, чем создавать решение или проект в Visual Studio, я думаю.

 json: [{"ew":"vehicles","hws":["car","van","bike","plane","bus"]},{"ew":"countries","hws":["America","India","France","Japan","South Africa"]}] 

c # code: взять только одно значение, например слово «велосипед».

 //res=[{"ew":"vehicles","hws":["car","van","bike","plane","bus"]},{"ew":"countries","hws":["America","India","France","Japan","South Africa"]}] dynamic stuff1 = Newtonsoft.Json.JsonConvert.DeserializeObject(res); string Text = stuff1[0].hws[2]; Console.WriteLine(Text); 

вывод:

 bike 

вы можете попробовать с System.Web.Script.Serialization.JavaScriptSerializer :

 var json = new JavaScriptSerializer(); var data = json.Deserialize>[]>(jsonStr); 

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

 var http = new HttpClient(); http.Request.Accept = HttpContentTypes.ApplicationJson; var response = http.Get("url"); var body = response.DynamicBody; Console.WriteLine("Name {0}", body.AppName.Description); Console.WriteLine("Name {0}", body.AppName.Value); 

На NuGet: EasyHttp

То, что вы пытаетесь десериализовать в словаре, на самом деле является объектом Javascript, сериализованным в JSON. В Javascript вы можете использовать этот объект как ассоциативный массив, но на самом деле это объект, что касается стандарта JSON.

Таким образом, у вас не возникнет проблем с десериализацией того, что у вас есть со стандартным сериализатором JSON (например, .net, DataContractJsonSerializer и JavascriptSerializer) для объекта (с элементами, называемыми AppName, AnotherAppName и т. Д.), Но на самом деле интерпретировать это как словарь, Мне нужен сериализатор, который идет дальше спецификации Json, которая, насколько мне известно, ничего не знает о словарях.

Одним из таких примеров является тот, который каждый использует: JSON .net

Существует другое решение, если вы не хотите использовать внешнюю библиотеку, которая должна преобразовать ваш объект Javascript в список, прежде чем сериализовать его в JSON.

 var myList = []; $.each(myObj, function(key, value) { myList.push({Key:key, Value:value}) }); 

теперь, если вы сериализуете myList для объекта JSON, вы должны быть десериализованы в List> с любым из вышеупомянутых сериализаторов. Тогда этот список станет совершенно очевидным для преобразования в словарь.

Примечание: ValueDescription является следующим classом:

 public class ValueDescription { public string Description { get; set; } public string Value { get; set; } } 
  • Конвенция о присвоении имен JSON
  • Как установить Json.Net в качестве сериализатора по умолчанию для службы WCF REST
  • Как я могу зашифровать выбранные свойства при сериализации моих объектов?
  • Сериализовать словарь как массив (пар ключей)
  • Невозможно сериализовать словарь с помощью сложного ключа с помощью Json.net
  • Настройте JSON.NET для игнорирования атрибутов DataContract / DataMember
  • Уничтожить вложенные JSON в объекты C #
  • Как показать «вставить class Json» в visual studio 2012, нажав на «Специальная вставка»?
  • Json.NET Отключить десериализацию в DateTime
  • JSON.NET: зачем использовать JToken - когда-либо?
  • Deserializing JSON, когда иногда массивы, а иногда и объекты
  • Interesting Posts
    Давайте будем гением компьютера.