web-dev-qa-db-fra.com

Quelle est la fonction C # la plus simple pour analyser une chaîne JSON dans un objet?

Quelle est la fonction C # la plus simple pour analyser une chaîne JSON dans un objet et l'afficher (C # XAML WPF)? (par exemple objet avec 2 tableaux - arrA et arrB)

50
Rella
DataContractJsonSerializer serializer = 
    new DataContractJsonSerializer(typeof(YourObjectType));

YourObjectType yourObject = (YourObjectType)serializer.ReadObject(jsonStream);

Vous pouvez également utiliser le JavaScriptSerializer, mais le DataContractJsonSerializer est censé mieux gérer les types complexes.

Curieusement, JavaScriptSerializer a été une fois déconseillé (en 3.5), puis ressuscité à cause d'ASP.NET MVC (en 3.5 SP1). Ce serait certainement suffisant pour ébranler ma confiance et me conduire à utiliser DataContractJsonSerializer car il est dur pour WCF.

38
Justin Niessner

Utilisez simplement la bibliothèque Json.NET . Il vous permet d'analyser très facilement les chaînes au format Json:

JObject o = JObject.Parse(@"
{
    ""something"":""value"",
    ""jagged"":
    {
        ""someother"":""value2""
    }
}");

string something = (string)o["something"];

Documentation: Parsing JSON Object using JObject.Parse

60
Philip Daubmeier

Je pense que c'est ce que vous voulez:

JavaScriptSerializer JSS = new JavaScriptSerializer();
T obj = JSS.Deserialize<T>(String);
18
Rbacarin

Vous devez créer une structure qui représente les clés JSON (au cas où si vous la connaissez exactement), puis vous pouvez facilement désérialiser la chaîne JSON dans votre structure. Dans mon exemple, j'ai désérialisé une réponse du serveur de messages Google Cloud:

class templateResponse
{
    public String multicast_id;
    public String success;
    public String failure;
    public String canonical_ids;
    public Result[] results;

    public class Result
    {
        public String message_id;
        public String registration_id;
        public String error;
    };
}

le JSON entrant était:

"\"multicast_id\":7400896764380883211,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1351777805148960%39895cf0f9fd7ecd\"}]}"

Alors, utilisez

templateResponse result = new JavaScriptSerializer().Deserialize<templateResponse>(json);

et vous obtiendrez un objet result désérialisé

5
Subtle Fox

Je voudrais faire écho à la bibliothèque Json.NET, qui peut transformer la réponse JSON en un document XML. Avec le document XML, vous pouvez facilement interroger avec XPath et extraire les données dont vous avez besoin. Je trouve cela assez utile.

2
George Ivanov