2017-04-25 1 views
2

Langue C#. Application de la console.Désérialisation du document JSON vers des objets C#

J'ai un document JSON en format suivant:

{"Cars":{"Mercedes": 1,"BMW": 3,"Toyota": 0},"Bikes":{"Kawasaki": 5,"Pulsar": 4}} 

je classes suivantes:

public class Vehicles 
    { 
    public Cars cars {get; set;} 
    public Bikes bikes {get; set;} 
    } 

    public class Cars 
    { 
     Dictionary<string, int> carcount {get; set;} 
    } 

    public class Bikes 
    { 
     Dictionary<string, int> bikecount {get; set;} 
    } 

je dois désérialiser le JSON dans la classe. J'ai essayé

Vehicles jsondata = JsonConvert.DesrializeObject<Vehicles>(jsonstring); 

je reçois les dictionnaires dans les deux motos et les voitures comme nulle. Je sais qu'il me manque quelque chose de très basique. Mais ne peux pas comprendre exactement quoi.
En outre, le format de chaîne JSON ne peut pas changer. La structure de classe peut changer cependant.

Répondre

2

Vous ne disposez pas d'un niveau appelé carcount ou bikecount. Au lieu de cela, vous avez les dictionnaires immédiatement. Notez que les noms de propriété sont sensibles à la casse, soyez donc très prudent lorsque vous mélangez le boîtier.

(Vous pourriez probablement fait cela un peu plus facile en suivant les étapes décrites in this answer. Malheureusement, cela ne prend pas le dictionnaire en compte. Il au moins vous donner un point de départ ici le dictionnaire devrait être.)

+0

@John et le vôtre, les deux sont les mêmes réponses et les deux sont corrects. Je choisis la réponse de John comme acceptée juste parce qu'il a répondu tôt. – Ansh43

+0

Il est difficile de poster plus tôt si l'autre ne fait que copier du code. –

+0

Je pensais que le problème serait auto-explicatif par rapport aux deux. De plus, j'ai remis en question votre réponse, car je pensais que c'était mieux que le mien. – john

2

Vous en avez besoin:

public class Vehicles 
{ 
    public Dictionary<string, int> Cars { get; set; } 
    public Dictionary<string, int> Bikes { get; set; } 
}