239 votes

Désérialiser JSON avec C#

J'essaie de désérialiser les données d'un ami Facebook. API graphique en une liste d'objets. L'objet JSON ressemble à :

{"data":[{"id":"518523721","name":"ftyft"},
         {"id":"527032438","name":"ftyftyf"},
         {"id":"527572047","name":"ftgft"},
         {"id":"531141884","name":"ftftft"},
         {"id":"532652067","name"...

List<EFacebook> facebooks = new JavaScriptSerializer().Deserialize<List<EFacebook>>(result);

Cela ne fonctionne pas, car l'objet primitif n'est pas valide. Comment puis-je le désérialiser ?

16voto

Stijn Bollen Points 107

Je suis d'accord avec Icarus (j'aurais commenté si j'avais pu), mais au lieu d'utiliser un CustomObject classe, j'utiliserais un Dictionnaire (au cas où Facebook ajouterait quelque chose).

private class MyFacebookClass
{
    public IList<IDictionary<string, string>> data { get; set; }
}

ou

private class MyFacebookClass
{
    public IList<IDictionary<string, object>> data { get; set; }
}

11voto

ravula sandeep Points 19

Sérialisation :

// Convert an object to JSON string format
string jsonData = JsonConvert.SerializeObject(obj);

Response.Write(jsonData);

Désérialisation : :

Pour désérialiser un objet dynamique

  string json = @"{
      'Name': 'name',
      'Description': 'des'
    }";

var res = JsonConvert.DeserializeObject< dynamic>(json);

Response.Write(res.Name);

8voto

haldo Points 4255

Si vous utilisez .NET Core 3.0, vous pouvez utiliser System.Text.Json (qui est maintenant intégré) pour désérialiser JSON.

La première étape consiste à créer des classes pour modéliser le JSON. Il existe de nombreux outils qui peuvent aider à cela, et certaines des réponses ici les listent.

Certaines options sont http://json2csharp.com , http://app.quicktype.io ou utiliser Visual Studio (menu ModifierCollage spécialColler JSON comme classes ).

public class Person
{
    public string Id { get; set; }
    public string Name { get; set; }
}

public class Response
{
    public List<Person> Data { get; set; }
}

Ensuite, vous pouvez désérialiser en utilisant :

var people = JsonSerializer.Deserialize<Response>(json);

Si vous devez ajouter des paramètres, tels que camelCase puis passez les paramètres du sérialiseur dans le désérialiseur comme ceci :

var options = new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
var person = JsonSerializer.Deserialize<Response>(json, options);

3voto

Vous pouvez utiliser ces extensions

public static class JsonExtensions
{
   public static T ToObject<T>(this string jsonText)
   {
       return JsonConvert.DeserializeObject<T>(jsonText);
   }

   public static string ToJson<T>(this T obj)
   {
       return JsonConvert.SerializeObject(obj);
   }
}

1voto

Liknes Points 167

Voici un autre site qui vous aidera avec tout le code dont vous avez besoin, à condition que vous disposiez d'une chaîne JSON correctement formatée :

https://app.quicktype.io/

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