88 votes

Désérialiser JSON de Newtonsoft

Mon JSON est le suivant :

{"t":"1339886","a":true,"data":[],"Type":[['Ants','Biz','Tro']]}

J'ai trouvé la bibliothèque JSON.NET deserialize de Newtonsoft pour C#. J'ai essayé de l'utiliser comme suit :

object JsonDe = JsonConvert.DeserializeObject(Json); 

Comment puis-je accéder au JsonDe pour obtenir toutes les données du "Type" ? J'ai essayé avec une boucle mais cela ne fonctionne pas car l'objet n'a pas d'énumérateur.

139voto

mbanzon Points 1969

Vous pouvez implémenter une classe qui contient les champs que vous avez dans votre JSON.

class MyData
{
    public string t;
    public bool a;
    public object[] data;
    public string[][] type;
}

puis utiliser la version générique de DeserializeObject :

MyData tmp = JsonConvert.DeserializeObject<MyData>(json);
foreach (string typeStr in tmp.type[0])
{
    // Do something with typeStr
}

Documentation : Sérialisation et désérialisation de JSON

86voto

Yves M. Points 1439

Une solution beaucoup plus simple : Utiliser un type dynamique

À partir de la version 4.0 Release 1 de Json.NET, il y a une fonction native dynamique soutien. Vous n'avez pas besoin de déclarer une classe, utilisez simplement dynamic :

dynamic jsonDe = JsonConvert.DeserializeObject(json);

Tous les champs seront disponibles :

foreach (string typeStr in jsonDe.Type[0])
{
    // Do something with typeStr
} 

string t = jsonDe.t;
bool a = jsonDe.a;
object[] data = jsonDe.data;
string[][] type = jsonDe.Type;

Avec dynamique vous n'avez pas besoin de créer une classe spécifique pour contenir vos données.

12voto

SomethingOn Points 1092

Conformément à la Documentation de Newtonsoft vous pouvez aussi désérialiser vers un objet anonyme comme ceci :

var definition = new { Name = "" };

string json1 = @"{'Name':'James'}";
var customer1 = JsonConvert.DeserializeAnonymousType(json1, definition);

Console.WriteLine(customer1.Name);
// James

1voto

yoandrygc Points 11
//Your snippet
object JsonDe = JsonConvert.DeserializeObject(Json);

//what you need to do
JObject JsonDe = JsonConvert.DeserializeObject<JObject>(Json);

Vous avez maintenant un objet avec des propriétés et des méthodes appropriées pour travailler avec les données.

Vous pourriez également utiliser Dictionary<string,object> au lieu de JObject. Cependant, il existe d'autres alternatives, de type fort cependant.

NewtonSoft.Json est une excellente bibliothèque. Je l'ai utilisée pour de nombreux cas d'utilisation.

La beauté de json est que l'on peut créer des schémas de manière dynamique. Par conséquent, nous devons être en mesure d'écrire du code générique pour travailler avec eux.

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