Parse Json string in C #

Sto cercando di leggere una stringa Json in C #, ma ho difficoltà a capire come analizzare la stringa in C #. Diciamo che ho la seguente stringa 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" } } ] 

Voglio analizzarlo in un arraylist o dizionario, usando un formato come

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

Ho gironzolato con Json.Net ma gli esempi che ho visto non mi danno un’idea chiara di come dovrei farlo. Qual è il modo migliore per raggiungere questo objective? Non si può fare come in jQuery, usando una dichiarazione foreach?

Sto usando Json.net nel mio progetto e funziona alla grande. Nel tuo caso, puoi farlo per analizzare il tuo json:

EDIT: ho cambiato il codice in modo che supporti la lettura del file json (array)

Codice da analizzare:

 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"); } } } 

Produzione:

 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 

A proposito, puoi usare LinqPad per testare il tuo codice, più facile che creare una soluzione o un progetto in Visual Studio, penso.

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

codice c #: per prendere solo un singolo valore, ad esempio la parola “bici”.

 //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); 

produzione:

 bike 

puoi provare con System.Web.Script.Serialization.JavaScriptSerializer :

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

Invece di un arraylist o di un dizionario puoi anche usare una dynamic. La maggior parte delle volte utilizzo EasyHttp per questo, ma sicuramente ci saranno altri progetti che fanno lo stesso. Un esempio qui sotto:

 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); 

Su NuGet: EasyHttp

Quello che stai cercando di deserializzare in un dizionario è in realtà un object Javascript serializzato su JSON. In Javascript, puoi usare questo object come array associativo, ma in realtà è un object, per quanto riguarda lo standard JSON.

Quindi non avresti alcun problema deserializzare ciò che hai con un serializzatore JSON standard (come .net, DataContractJsonSerializer e JavascriptSerializer) su un object (con membri chiamati AppName, AnotherAppName, ecc.), Ma per interpretarlo come un dizionario tu stesso ” Ho bisogno di un serializzatore che vada oltre la specifica Json, che non ha nulla riguardo i dizionari, per quanto ne so.

Uno di questi esempi è quello che tutti usano: JSON .net

Esiste un’altra soluzione se non si desidera utilizzare una lib esterna, che è quella di convertire il proprio object Javascript in un elenco prima di serializzarlo su JSON.

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

ora se serializzi myList su un object JSON, dovresti essere in grado di deserializzare in un List> con uno dei serializzatori sopra menzionati. Tale elenco sarebbe quindi abbastanza ovvio per la conversione in un dizionario.

Nota: ValueDescription è di questa class:

 public class ValueDescription { public string Description { get; set; } public string Value { get; set; } }