Comment puis-je parsingr JSON avec C #?

J’ai le code suivant:

var user = (Dictionary)serializer.DeserializeObject(responsecontent); 

L’entrée dans responsecontent est JSON, mais elle n’est pas correctement analysée dans un object. Comment dois-je le désérialiser correctement?

    Je suppose que vous n’utilisez pas Json.NET (package Newtonsoft.Json NuGet). Si tel est le cas, alors vous devriez l’essayer.

    Il a les caractéristiques suivantes:

    1. LINQ to JSON
    2. JsonSerializer pour convertir rapidement vos objects .NET en JSON et inversement
    3. Json.NET peut éventuellement produire un JSON indenté bien formaté pour le débogage ou l’affichage
    4. Des atsortingbuts tels que JsonIgnore et JsonProperty peuvent être ajoutés à une classe pour personnaliser la sérialisation d’une classe
    5. Possibilité de convertir JSON vers et depuis XML
    6. Prend en charge plusieurs plates-formes: .NET, Silverlight et Compact Framework

    Regardez l’ exemple ci-dessous. Dans cet exemple, la classe JsonConvert est utilisée pour convertir un object vers et depuis JSON. Il dispose de deux méthodes statiques à cet effet. Ce sont SerializeObject(Object obj) et DeserializeObject(Ssortingng json) :

     Product product = new Product(); product.Name = "Apple"; product.Expiry = new DateTime(2008, 12, 28); product.Price = 3.99M; product.Sizes = new ssortingng[] { "Small", "Medium", "Large" }; ssortingng json = JsonConvert.SerializeObject(product); //{ // "Name": "Apple", // "Expiry": "2008-12-28T00:00:00", // "Price": 3.99, // "Sizes": [ // "Small", // "Medium", // "Large" // ] //} Product deserializedProduct = JsonConvert.DeserializeObject(json); 

    Comme cela a été répondu ici – Désérialiser JSON en object dynamic C #?

    C’est assez simple avec Json.NET:

     dynamic stuff = JsonConvert.DeserializeObject("{ 'Name': 'Jon Smith', 'Address': { 'City': 'New York', 'State': 'NY' }, 'Age': 42 }"); ssortingng name = stuff.Name; ssortingng address = stuff.Address.City; 

    Ou en utilisant Newtonsoft.Json.Linq:

     dynamic stuff = JObject.Parse("{ 'Name': 'Jon Smith', 'Address': { 'City': 'New York', 'State': 'NY' }, 'Age': 42 }"); ssortingng name = stuff.Name; ssortingng address = stuff.Address.City; 

    Voici quelques options sans utiliser de bibliothèques tierces:

     // For that you will need to add reference to System.Runtime.Serialization var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(@"{ ""Name"": ""Jon Smith"", ""Address"": { ""City"": ""New York"", ""State"": ""NY"" }, ""Age"": 42 }"), new System.Xml.XmlDictionaryReaderQuotas()); // For that you will need to add reference to System.Xml and System.Xml.Linq var root = XElement.Load(jsonReader); Console.WriteLine(root.XPathSelectElement("//Name").Value); Console.WriteLine(root.XPathSelectElement("//Address/State").Value); // For that you will need to add reference to System.Web.Helpers dynamic json = System.Web.Helpers.Json.Decode(@"{ ""Name"": ""Jon Smith"", ""Address"": { ""City"": ""New York"", ""State"": ""NY"" }, ""Age"": 42 }"); Console.WriteLine(json.Name); Console.WriteLine(json.Address.State); 

    Consultez le lien pour plus d’informations sur System.Web.Helpers.Json .

    Mise à jour : la méthode la plus simple pour obtenir Web.Helpers consiste à utiliser le package NuGet .


    Si vous ne vous souciez pas des versions antérieures de Windows, vous pouvez utiliser les classes de l’espace de noms Windows.Data.Json :

     // minimum supported version: Win 8 JsonObject root = Windows.Data.Json.JsonValue.Parse(jsonSsortingng).GetObject(); Console.WriteLine(root["Name"].GetSsortingng()); Console.WriteLine(root["Address"].GetObject()["State"].GetSsortingng()); 

    Si .NET 4 est à votre disposition, consultez: http://visitmix.com/writings/the-rise-of-json (archive.org)

    Voici un extrait de ce site:

     WebClient webClient = new WebClient(); dynamic result = JsonValue.Parse(webClient.DownloadSsortingng("https://api.foursquare.com/v2/users/self?oauth_token=XXXXXXX")); Console.WriteLine(result.response.user.firstName); 

    Cette dernière Console.WriteLine est assez douce …

    Une autre solution native à cela, qui ne nécessite aucune bibliothèque tierce, mais une référence à System.Web.Extensions est le JavaScriptSerializer. Ce n’est pas une nouveauté mais une fonctionnalité intégrée très inconnue depuis 3.5.

     using System.Web.Script.Serialization; 

    ..

     JavaScriptSerializer serializer = new JavaScriptSerializer(); objectSsortingng = serializer.Serialize(new MyObject()); 

    et retour

     MyObject o = serializer.Deserialize(objectSsortingng) 

    Vous pouvez également consulter le DataContractJsonSerializer

    Les éléments suivants du site msdn devraient vous aider à fournir des fonctionnalités natives pour ce que vous recherchez. S’il vous plaît noter qu’il est spécifié pour Windows 8. Un exemple de ce site est répertorié ci-dessous.

     JsonValue jsonValue = JsonValue.Parse("{\"Width\": 800, \"Height\": 600, \"Title\": \"View from 15th Floor\", \"IDs\": [116, 943, 234, 38793]}"); double width = jsonValue.GetObject().GetNamedNumber("Width"); double height = jsonValue.GetObject().GetNamedNumber("Height"); ssortingng title = jsonValue.GetObject().GetNamedSsortingng("Title"); JsonArray ids = jsonValue.GetObject().GetNamedArray("IDs"); 

    Il utilise l’espace de noms Windows.Data.JSON .

    Essayez le code suivant:

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("URL"); JArray array = new JArray(); using (var twitpicResponse = (HttpWebResponse)request.GetResponse()) using (var reader = new StreamReader(twitpicResponse.GetResponseStream())) { JavaScriptSerializer js = new JavaScriptSerializer(); var objText = reader.ReadToEnd(); JObject joResponse = JObject.Parse(objText); JObject result = (JObject)joResponse["result"]; array = (JArray)result["Detail"]; ssortingng statu = array[0]["dlrStat"].ToSsortingng(); } 

    Je pense que la meilleure réponse que j’ai vue a été @MD_Sayem_Ahmed.

    Votre question est “Comment puis-je parsingr Json avec C #”, mais il semble que vous vouliez décoder Json. Si vous voulez le décoder, la réponse d’Ahmed est bonne.

    Si vous essayez d’accomplir cela dans ASP.NET Web Api, le plus simple est de créer un object de transfert de données contenant les données que vous souhaitez affecter:

     public class MyDto{ public ssortingng Name{get; set;} public ssortingng Value{get; set;} } 

    Vous avez simplement ajouté l’en-tête application / json à votre requête (si vous utilisez Fiddler, par exemple). Vous utiliseriez alors ceci dans l’API Web ASP.NET comme suit:

     //controller method -- assuming you want to post and return data public MyDto Post([FromBody] MyDto myDto){ MyDto someDto = myDto; /*ASP.NET automatically converts the data for you into this object if you post a json object as follows: { "Name": "SomeName", "Value": "SomeValue" } */ //do some stuff } 

    Cela m’a beaucoup aidé lorsque je travaillais sur mon Web Api et que je me suis simplifié la vie.

     var result = controller.ActioName(objParams); IDictionary data = (IDictionary)new System.Web.Routing.RouteValueDictionary(result.Data); Assert.AreEqual("Table already exists.", data["Message"]); 

    System.Json fonctionne maintenant …

    Installez nuget https://www.nuget.org/packages/System.Json

     PM> Install-Package System.Json -Version 4.5.0 

    Échantillon :

     // PM>Install-Package System.Json -Version 4.5.0 using System; using System.Json; namespace NetCoreTestConsoleApp { class Program { static void Main(ssortingng[] args) { // Note that json keys are case sensitive, a is not same as A. // Json Sample ssortingng jsonSsortingng = "{\"a\": 1,\"b\": \"ssortingng value\",\"c\":[{\"Value\": 1}, {\"Value\": 2,\"SubObject\":[{\"SubValue\":3}]}]}"; // Verify your json if you get any errors here JsonValue json = JsonValue.Parse(jsonSsortingng); // int test if (json.ContainsKey("a")) { int a = json["a"]; // type already set to int Console.WriteLine("json[\"a\"]" + " = " + a); } // ssortingng test if (json.ContainsKey("b")) { ssortingng b = json["b"]; // type already set to ssortingng Console.WriteLine("json[\"b\"]" + " = " + b); } // object array test if (json.ContainsKey("c") && json["c"].JsonType == JsonType.Array) { // foreach loop test foreach (JsonValue j in json["c"]) { Console.WriteLine("j[\"Value\"]" + " = " + j["Value"].ToSsortingng()); } // multi level key test Console.WriteLine("json[\"c\"][0][\"Value\"]" + " = " + json["c"][0]["Value"].ToSsortingng()); Console.WriteLine("json[\"c\"][0][\"Value\"]" + " = " + json["c"][1]["Value"].ToSsortingng()); Console.WriteLine("json[\"c\"][1][\"SubObject\"][0][\"SubValue\"]" + " = " + json["c"][1]["SubObject"][0]["SubValue"].ToSsortingng()); } Console.WriteLine(); Console.Write("Press any key to exit."); Console.ReadKey(); } } }