web-dev-qa-db-fra.com

Newtonsoft JSON Deserialize

Mon JSON est comme suit:

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

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

object JsonDe = JsonConvert.DeserializeObject(Json); 

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

76
abc cba

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

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

puis utilisez 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 JSON

127
Michael Banzon

Une solution beaucoup plus simple: utiliser un type dynamique

Depuis Json.NET 4.0 Release 1, il existe un support natif dynamique . 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 stocker vos données.

76
Yves M.

Comme indiqué dans le Newtonsoft Documentation , vous pouvez également effectuer une désérialisation sur un objet anonyme comme celui-ci:

var definition = new { Name = "" };

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

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