J'essaie d'utiliser une API qui utilise la structure d'exemple suivante pour leur json retourné
[
{
"customer":{
"first_name":"Test",
"last_name":"Account",
"email":"[email protected]",
"organization":"",
"reference":null,
"id":3545134,
"created_at":"2013-08-06T15:51:15-04:00",
"updated_at":"2013-08-06T15:51:15-04:00",
"address":"",
"address_2":"",
"city":"",
"state":"",
"zip":"",
"country":"",
"phone":""
}
},
{
"customer":{
"first_name":"Test",
"last_name":"Account2",
"email":"[email protected]",
"organization":"",
"reference":null,
"id":3570462,
"created_at":"2013-08-12T11:54:58-04:00",
"updated_at":"2013-08-12T11:54:58-04:00",
"address":"",
"address_2":"",
"city":"",
"state":"",
"zip":"",
"country":"",
"phone":""
}
}
]
JSON.net fonctionnerait très bien avec quelque chose comme la structure suivante
{
"customer": {
["field1" : "value", etc...],
["field1" : "value", etc...],
}
}
Mais je ne peux pas comprendre comment le rendre satisfait de la structure fournie.
L'utilisation du JsonConvert.DeserializeObject (content) par défaut donne le nombre correct de Customer, mais toutes les données sont nulles.
Faire quelque chose dans CustomerList (ci-dessous) entraîne une exception «Impossible de désérialiser le tableau JSON actuel»
public class CustomerList
{
public List<Customer> customer { get; set; }
}
Pensées?
Réponses:
Vous pouvez créer un nouveau modèle pour désérialiser votre Json
CustomerJson
:Et vous pouvez désérialiser votre json facilement:
J'espère que ça aide !
Documentation: sérialisation et désérialisation de JSON
la source
DeserializeObject()
est lent sur les téléphones Android exécutant ARM. Une meilleure solution pour ce cas?JObject.Parse(json);
Pour ceux qui ne souhaitent pas créer de modèles, utilisez le code suivant:
Remarque: cela ne fonctionne pas pour votre chaîne JSON. Ce n'est pas une solution générale pour aucune structure JSON.
la source
var result = JsonConvert.DeserializeObject<Tuple<string, string, string>>(content);
IEnumerable
implémentations (3 par rapport à un List <Tuple>). Deuxièmement, votre solution implique deux clés distinctes - 1 pour chaque dictionnaire. Que se passe-t-il si plusieurs clients portent le même prénom? Il n'y aurait pas de différenciation sur les clés. Votre solution ne prend pas ce conflit en considération.var result = JsonConvert.DeserializeObject<Tuple<string, string, string>>(content);
cela fonctionnerait. Apparemment, cela ne fonctionne pasEn utilisant la réponse acceptée, vous devez accéder à chaque enregistrement en utilisant
Customers[i].customer
, et vous avez besoin d'uneCustomerJson
classe supplémentaire , ce qui est un peu ennuyeux. Si vous ne souhaitez pas faire cela, vous pouvez utiliser ce qui suit:Notez que j'utilise un
List<>
, pas un tableau. Créez maintenant la classe suivante:la source
Légère modification de ce qui a été indiqué ci-dessus. Mon format Json, qui valide était
En utilisant la réponse d'AlexDev, j'ai fait cette boucle chaque enfant, en créant un lecteur à partir de celui-ci
la source
Nouvelle modification de JC_VA, prenez ce qu'il a et remplacez le MyModelConverter par ...
Cela devrait fonctionner pour json qui est soit
ou
ils finiront tous les deux par être analysés comme s'ils étaient
la source