La désérialisation tableau JSON dans fortement typé .NET objet
Quand je peux appeler la 3ème partie de l'api et de revenir à une seule catégorie de données tout deserialises fine à l'aide de ce code
TheUser me = jsonSerializer.Deserialize(response, typeof(TheUser)) as TheUser
Le problème vient quand je l'ai essayer et deserialise JSON contenu de la réponse qui est un tableau, comme
{
"data": [
{
"name": "A Jones",
"id": "500015763"
},
{
"name": "B Smith",
"id": "504986213"
},
{
"name": "C Brown",
"id": "509034361"
}
]
}
Je ne peux obtenir la sérialisation de travail si j'utilise un emballage sur mesure de classe autour de la "data" du membre et membre doit être de type List<object>
. Si il ont comme type de List<TheUser>
- je obtenir ArgumentException
de la JsonParser DesializeType
méthode.
J'ai d'abord essayé de serialise sans un type d'emballage comme ce
List<TheUser> freinds = jsonSerializer.Deserialize(response, typeof(List<TheUser>)) as List<TheUser>;
mais qui ne renvoie-moi un vide de la collection. Certes, je doit être en mesure d'avoir le tableau de désérialiser à une fortement typé liste.
- J'ai le même problème; si vous désérialisez
response
dans undynamic
var au lieu deTheUser
, puisdeserialized.data
est disponible enJArray
-- aucune idée si vous pouvez les convertir enList<something>
? - Semble que vous devriez être en mesure de (lien).
Vous devez vous connecter pour publier un commentaire.
Afer regardant la source, pour WP7 Hamac ne fait pas les utiliser Json.Net pour JSON de l'analyse. Au lieu de cela, il utilise son propre analyseur qui ne supporte pas le type personnalisé est très bien.
Si vous utilisez Json.Net directement, il est possible de désérialiser à un typage fort de la collection à l'intérieur d'un objet wrapper.
et avec:
Avoir à créer l'objet supplémentaire avec les données de la propriété est ennuyeux, mais c'est une conséquence de la manière dont le format JSON objet est construit.
Documentation: La sérialisation et la Désérialisation JSON
Json.Parse(jsonString)
et puis faire unJsonConvert.DeserializeObject(parsedJson["data"]).ToString())
pour enfin obtenir une liste deUser
, la performance et la santé mentale sage? 😉essayer
List<TheUser> friends = JsonConvert.DeserializeObject<List<TheUser>>(response);
Cette solution semble fonctionner pour moi et se déplace avoir à coder un tas de classes avec des "Data" dans les.
Je devrais avoir inclus ce, pour commencer, voici un exemple à l'aide de la méthode ci-dessus:
Cela a fonctionné pour moi pour la désérialisation JSON en un tableau d'objets:
Json.NET - Documentation
http://james.newtonking.com/json/help/index.html?topic=html/SelectToken.htm
Interprétation de l'auteur
Pat, la structure json semble très familier à un problème que j'ai décrit ici - La réponse pour moi était de traiter la représentation json comme un Dictionnaire<TKey, TValue>, même si il y avait seulement 1 entrée.
Si je suis correct de votre clé est de type chaîne de caractères et la valeur d'une Liste<T> où T représente la classe 'Utilisateur'
HTH
PS - si vous souhaitez mieux la sérialisation perf découvrez à l'aide de Silverlight Sérialiseur, vous aurez besoin de construire une version WP7, Shameless plug - j'ai écrit un billet de blog sur cette
Je soupçonne que le problème est que le json représente un objet avec la liste des utilisateurs en tant que bien. Essayez de la désérialisation à quelque chose comme: