51 votes

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)

61voto

Philip Daubmeier Points 6559

Il suffit d'utiliser 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.SelectToken("something");
 

38voto

Justin Niessner Points 144953
 DataContractJsonSerializer serializer = 
    new DataContractJsonSerializer(typeof(YourObjectType));

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

Vous pouvez également utiliser les JavaScriptSerializer , mais DataContractJsonSerializer est censé être plus apte à gérer des types complexes.

Curieusement, JavaScriptSerializer était une fois obsolète (en 3.5) puis ressuscité à cause d’ASP.NET MVC (en 3.5 SP1). Cela suffirait certainement à ébranler ma confiance en moi et à me conduire à utiliser DataContractJsonSerializer car il est difficile à cuire pour la WCF.

18voto

Rbacarin Points 542

Je pense que c'est ce que tu veux:

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

5voto

Subtle Fox Points 385

Vous devez créer une structure qui représente les clés JSON (au cas où vous le sachiez exactement), puis désérialiser facilement une 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;
    };
}
 

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 result objet désérialisé

1voto

KMån Points 7972

Cette réponse pourrait vous aider.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X