Meilleur auteur de réponses
Parser un objet JSON dans une application Windows 8

Question
-
Bonjour à toutes et à tous,
Je viens exposer un problème que j'ai rencontré lorsque je parse un objet JSON récupéré sur une API.
Exemple de l'objet JSON :
{"id":1,
"name":"Basic",
"description":"Plat,Boisson",
"picture":"http:\/\/img15.hostingpics.net\/pics\/192567basic.png",
"price":"3.50",
"priceAdherant":"2.50",
"priceAdherent":"2.50",
"products":[1,2,14,17,18,20,22,23,25],
"categories":{"1":{"maxProducts":1,"id":1,"name":"Plat","products":[1,2]},"2":{"maxProducts":1,"id":2,"name":"Boissons","products":[14,17,18,20,22,23,25]}},
"enabled":true}
Les classes que j'ai créées afin de manipuler l'objet :
Menu :
class Menu { //Attributes private int _Id; private string _Name; private string _Description; private string _Picture; private decimal _Price; private decimal _PriceAdherent; private List<int> _Products; private List<Category> _Categories; private bool _IsEnabled; .......
et ma classe Category
class Category { //Attributes private int _MaxProducts; private int _Id; private string _Name; private List<int> _Products; .....
Et pour finir, la fonction qui permet de récupérer mon objet menu :
static public async Task<Menu> GetMenuById(int pMenuId) { Menu menu; try { HttpClient client = new HttpClient(); Task<string> getStringTask = client.GetStringAsync("http://food.bedelicious.fr/services/menu/get/" + pMenuId.ToString()); string urlContents = await getStringTask; menu = JsonConvert.DeserializeObject<Menu>(urlContents); } catch (Exception) { //When an web exception occurs return null; } return menu; }
Lorsque que je récupère l'objet, tous les attributs de Menu sont bien récupérés, mis à part "categories", qui reste désespérément vide.
C'est donc ce bout de JSON que je récupère pas :
"categories":{"1":{"maxProducts":1,"id":1,"name":"Plat","products":[1,2]},"2":{"maxProducts":1,"id":2,"name":"Boissons","products":[14,17,18,20,22,23,25]}}
Mon choix de faire une List<Category> ne fonctionne donc pas ? Que dois-je faire pour récupérer ces informations ?
Merci beaucoup de votre aide,
Cordialement
Réponses
-
Voila qui devrait résoudre ton soucis je pense.
public class Menu { [JsonProperty("id")] public int Id { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonProperty("description")] public string Description { get; set; } [JsonProperty("picture")] public string Picture { get; set; } [JsonProperty("price")] public string Price { get; set; } [JsonProperty("priceAdherant")] public string PriceAdherant { get; set; } [JsonProperty("products")] public int[] Products { get; set; } [JsonProperty("categories")] public Dictionary<int, Categories> Categories { get; set;} [JsonProperty("enabled")] public bool Enabled { get; set;} }
- Modifié Nicolas Dumez vendredi 27 septembre 2013 17:53
- Marqué comme réponse MacMah0n vendredi 27 septembre 2013 17:54
Toutes les réponses
-
Bonjour,
Avez-vous essayé de poser les attributs JsonProperty sur les propriétés ?
Cordialement
Gilles TOURREAU - MVP C#
Architecte logiciel/Consultant/Formateur Freelance
Blog : http://gilles.tourreau.fr
- MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
- MCITP : SQL Server 2008 Developper
- MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 -
-
Normalement ça doit fonctionner.
Pouvez-vous vérifier la classe Menu sur le serveur aussi que sur le client (assurez-vous que vous utilisez la même classe)?
Cordialement,
Aurel BERA, MSFT
MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.- Modifié Aurel Bera vendredi 27 septembre 2013 13:52
-
Merci de vos réponses !
Je n'ai pas accès coté serveur, j'ai juste accès au JSON.
Est-ce que cela ne viendrais du fait de ces index 1: et 2:
"categories": { "1": { "maxProducts": 1, "id": 1, "name": "Plat", "products": [ 1, 2 ] }, "2": { "maxProducts": 1, "id": 2, "name": "Boissons", "products": [ 14, 17, 18, 20, 22, 23, 25 ] }}
Qui engendrerai l'incompatibilité avec une List<Category>
- Modifié MacMah0n vendredi 27 septembre 2013 14:12
-
Voila qui devrait résoudre ton soucis je pense.
public class Menu { [JsonProperty("id")] public int Id { get; set; } [JsonProperty("name")] public string Name { get; set; } [JsonProperty("description")] public string Description { get; set; } [JsonProperty("picture")] public string Picture { get; set; } [JsonProperty("price")] public string Price { get; set; } [JsonProperty("priceAdherant")] public string PriceAdherant { get; set; } [JsonProperty("products")] public int[] Products { get; set; } [JsonProperty("categories")] public Dictionary<int, Categories> Categories { get; set;} [JsonProperty("enabled")] public bool Enabled { get; set;} }
- Modifié Nicolas Dumez vendredi 27 septembre 2013 17:53
- Marqué comme réponse MacMah0n vendredi 27 septembre 2013 17:54
-