84 votes

Comment obtenir des valeurs à partir d'une chaîne JSON en C# ?

J'ai une chaîne de caractères et je veux en extraire des valeurs.

Mes cordes semblent.. :

chaîne1 :

"{\r\n   \"id\": \"100000280905615\",
 \r\n \"name\": \"Jerard Jones\",
 \r\n   \"first_name\": \"Jerard\",
 \r\n   \"last_name\": \"Jones\",
 \r\n   \"link\": \"https://www.facebook.com/Jerard.Jones\",
 \r\n   \"username\": \"Jerard.Jones\",
 \r\n   \"gender\": \"female\",
 \r\n   \"locale\": \"en_US\"\r\n}"

string2 :

"{\r\n   \"id\": \"100000390001929\",
  \r\n   \"name\": \"\\u05d1\\u05d2\\u05e8\\u15dc\\u25d9 \\u05d1\\u05e8\\u05d5\\u05e9\",
  \r\n   \"first_name\": \"\\u05d4\\u05d2\\u05e7\\u02dc\\u05d9\",
  \r\n   \"last_name\": \"\\u05d1\\u05e8\\u05d5\\u05e9\",
  \r\n   \"link\": "https://www.facebook.com/people/\\u05d2\\u05d1\\u05e@\\u05dc\\u05d9-\\u05d1\\u05e8\\u05d4\\u05e9/100000390001929\",
  \r\n   \"gender\": \"female\",
  \r\n   \"locale\": \"he_IL\"\r\n}"

Malheureusement, il peut arriver qu'une chaîne soit réalisée selon le même concept, mais sans certains paramètres :

string3 :

"{\r\n   \"id\": \"100000390001929\",
  \r\n   \"last_name\": \"\\u05d1\\u05e8\\u05d5\\u05e9\",
  \r\n   \"gender\": \"female\",
  \r\n   \"locale\": \"he_IL\"\r\n}"

Comment puis-je obtenir les valeurs de : id , first_name , last_name , gender , locale ?

Toute aide est la bienvenue !

146voto

Rubens Mariuzzo Points 6022

Vos chaînes sont formatées en JSON, vous devrez donc l'analyser dans un objet. Pour cela, vous pouvez utiliser JSON.NET .

Voici un exemple d'analyse d'une chaîne JSON en un objet dynamique :

string source = "{\r\n   \"id\": \"100000280905615\", \r\n \"name\": \"Jerard Jones\",  \r\n   \"first_name\": \"Jerard\", \r\n   \"last_name\": \"Jones\", \r\n   \"link\": \"https://www.facebook.com/Jerard.Jones\", \r\n   \"username\": \"Jerard.Jones\", \r\n   \"gender\": \"female\", \r\n   \"locale\": \"en_US\"\r\n}";
dynamic data = JObject.Parse(source);
Console.WriteLine(data.id);
Console.WriteLine(data.first_name);
Console.WriteLine(data.last_name);
Console.WriteLine(data.gender);
Console.WriteLine(data.locale);

Bon codage !

24voto

Muhammad Awais Points 1735

Le code suivant fonctionne pour moi.

Utilisations :

using System.IO;
using System.Net;
using Newtonsoft.Json.Linq;

Code :

 using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (Stream responseStream = response.GetResponseStream())
                    {
                        using (StreamReader responseReader = new StreamReader(responseStream))
                        {
                            string json = responseReader.ReadToEnd();
                            string data = JObject.Parse(json)["id"].ToString();
                        }
                    }
                }

//json = {"kind": "ALL", "id": "1221455", "longUrl": "NewURL"}

18voto

Dipal Kothari Points 3163

Ma chaîne

var obj = {"Status":0,"Data":{"guid":"","invitationGuid":"","entityGuid":"387E22AD69-4910-430C-AC16-8044EE4A6B24443545DD"},"Extension":null}

Suivre le code pour obtenir le guide :

var userObj = JObject.Parse(obj);
var userGuid = Convert.ToString(userObj["Data"]["guid"]);

7voto

Ligabb Points 96

Créez une classe comme celle-ci :

public class Data
{
    public string Id {get; set;}
    public string Name {get; set;}
    public string First_Name {get; set;}
    public string Last_Name {get; set;}
    public string Username {get; set;}
    public string Gender {get; set;}
    public string Locale {get; set;}
}

(Je ne suis pas sûr à 100 %, mais si cela ne fonctionne pas, vous devrez utiliser [DataContract] y [DataMember] para DataContractJsonSerializer .)

Créez ensuite JSonSerializer :

private static readonly XmlObjectSerializer Serializer = new DataContractJsonSerializer(typeof(Data));

et désérialiser l'objet :

// convert string to stream
byte[] byteArray = Encoding.UTF8.GetBytes(contents);
using(var stream = new MemoryStream(byteArray))
{
    (Data)Serializer.ReadObject(stream);
}

6voto

Stefan Points 7640

Une version .NET 6 utilisant System.Text.Json

using System;

public class Program
{
    public static void Main()
    {
        var jsonString = @"{ ""id"" : 123 }";

        //parse it
        var yourObject = System.Text.Json.JsonDocument.Parse(jsonString);
        //retrieve the value
        var id= yourObject.RootElement
                          .GetProperty("id");

        Console.WriteLine(id);
    }
}

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