web-dev-qa-db-fra.com

JObject comment lire les valeurs du tableau?

Voici la chaîne json:

{"d":[{"numberOfRowsAdded":"26723"}]}

string json = DAO.getUploadDataSummary();
JObject uploadData = JObject.Parse(json);
string array = (string)uploadData.SelectToken("d");

Comment changer le code pour lire les valeurs dans 'numberOfRowsAdded?

48
user1781830
JObject uploadData = JObject.Parse(json);
int rowsAdded = Convert.ToInt32((string)uploadData["d"][0]["numberOfRowsAdded"])
51

Vous devez convertir en JArray:

string json = "{\"d\":[{\"numberOfRowsAdded\":\"26723\"}]}";
JObject parsed = JObject.Parse(json);
JArray array = (JArray) parsed["d"];
Console.WriteLine(array.Count);
43
Jon Skeet

Vous pouvez convertir votre JObject en objet dynamic.
Vous pouvez également convertir votre tableau en objet JArray.

JObject yourObject;
//To access to the properties in "dot" notation use a dynamic object
dynamic obj = yourObject;
//Loop over the array
foreach (dynamic item in obj.d) {
  var rows = (int)item.numberOfRowsAdded;
}
3
jherax

J'ai joué avec l'écriture d'une méthode générique qui peut lire n'importe quelle partie de ma chaîne json. J'ai essayé beaucoup de réponses sur ce fil et cela ne convenait pas à mon besoin. Voilà donc ce que j'ai trouvé. J'utilise la méthode suivante dans ma couche de service pour lire mes propriétés de configuration à partir de la chaîne json.

public T getValue<T>(string json,string jsonPropertyName)
{                      
    var parsedResult= JObject.Parse(json);

    return parsedResult.SelectToken(jsonPropertyName).ToObject<T>();
}

et voici comment vous l'utiliseriez:

var result = service.getValue<List<string>>(json, "propertyName");

Vous pouvez donc l'utiliser pour obtenir des propriétés spécifiques au sein de votre chaîne json et les convertir en tout ce dont vous avez besoin.

0
Carodice