Impossible de désérialiser le tableau JSON actuel (par exemple [1,2,3])
Je suis en train de lire mon résultat JSON.
Voici mon RootObject
public class RootObject
{
public int id { get; set; }
public bool is_default { get; set; }
public string name { get; set; }
public int quantity { get; set; }
public string stock { get; set; }
public string unit_cost { get; set; }
}
Voici mon résultat JSON
[{"id": 3636, "is_default": true, "name": "Unit", "quantity": 1, "stock": "100000.00", "unit_cost": "0"}, {"id": 4592, "is_default": false, "name": "Bundle", "quantity": 5, "stock": "100000.00", "unit_cost": "0"}]
Voici mon code pour lire le résultat
public static RootObject GetItems(string user, string key, Int32 tid, Int32 pid)
{
//Customize URL according to geo location parameters
var url = string.Format(uniqueItemUrl, user, key, tid, pid);
//Syncronious Consumption
var syncClient = new WebClient();
var content = syncClient.DownloadString(url);
return JsonConvert.DeserializeObject<RootObject>(content);
}
Mais j'ai un problème avec cette erreur :
Ne peut pas désérialiser l'actuel tableau JSON (par exemple, [1,2,3]) dans le type 'avaris_cash_salepoint.BL.UniqueItemDataRootObject " parce que le type de
nécessite un objet JSON (par exemple, {"name":"valeur"}) pour désérialiser
correctement. Pour corriger cette erreur soit modifier le JSON d'un objet JSON
(par exemple, {"name":"valeur"}) ou de modifier le désérialisé type d'un tableau ou d'
un type qui implémente une interface de collecte (par exemple, ICollection,
IList) comme Liste qui peut être désérialisé à partir d'un tableau JSON.
JsonArrayAttribute peuvent également être ajoutés à la type pour le forcer à
désérialiser à partir d'un tableau JSON. Chemin d'accès ", line 1, position 1.
à cette ligne:
retour JsonConvert.DeserializeObject(contenu);
De toute aide pour corriger cette erreur ?
source d'informationauteur Djama
Vous devez vous connecter pour publier un commentaire.
Je pense que le problème que vous rencontrez, c'est que votre JSON est une liste d'objets quand il arrive et il ne se rapportent directement à la racine de votre classe.
var content
ressemblerait à quelque chose comme ceci (je suppose):Remarque: utiliser http://jsonviewer.stack.hu/ au format de votre JSON.
Donc, si vous essayez ce qui suit, il devrait fonctionner:
Vous devrez parcourir si vous ne voulez pas retourner une liste de
RootObject
.Je suis allé de l'avant et testé cela dans une application Console, a bien fonctionné.
C'est parce que le json que vous obtenez est un tableau de votre
RootObject
classe, plutôt qu'un seul exemple, changer votreDeserialiseObject<RootObject>
être quelque chose commeDeserialiseObject<RootObject[]>
(non testé).Vous devrez soit changer votre méthode de renvoyer une collection de
RootObject
ou faire des traitements sur la deserialised objet de retourner une instance unique.Si vous regardez une version mise en forme de la réponse que vous avez fournie:
Vous pouvez le voir dans deux cas.
Vous pouvez l'utiliser pour résoudre votre problème:
Vous disposez d'un tableau, de les convertir en un objet, quelque chose comme: