48 votes

Comment puis-je analyser une chaîne JSON qui provoquerait des identificateurs C # illégaux?

J'ai été en utilisant NewtonSoft JSON Convertir bibliothèque d'analyser et de convertir de la chaîne JSON d'objets C#. Mais maintenant, j'ai rencontré un vraiment maladroit chaîne JSON et je ne suis pas en mesure de le convertir en objet C# parce que je ne peux pas faire une classe C# de cette chaîne JSON.

Voici la chaîne JSON

{
"1": {
    "fajr": "04:15",
    "sunrise": "05:42",
    "zuhr": "12:30",
    "asr": "15:53",
    "maghrib": "19:18",
    "isha": "20:40"
},
"2": {
    "fajr": "04:15",
    "sunrise": "05:42",
    "zuhr": "12:30",
    "asr": "15:53",
    "maghrib": "19:18",
    "isha": "20:41"
 } 
}

La classe C# nécessaire à l'analyse de cette chaîne JSON doit être comme ceci:

public class 1 {

    public string fajr { get; set; }
    public string sunrise { get; set; }
    public string zuhr { get; set; }
    public string asr { get; set; }
    public string maghrib { get; set; }
    public string isha { get; set; }
}

public class 2 {

    public string fajr { get; set; }
    public string sunrise { get; set; }
    public string zuhr { get; set; }
    public string asr { get; set; }
    public string maghrib { get; set; }
    public string isha { get; set; }
}

Mais il ne peut pas être un vrai de classe C# parce que nous savons que les noms de Classe ne peut pas commencer par un chiffre.

Ça serait vraiment génial si quelqu'un peut suggérer comment analyser ce type de chaîne json.

66voto

L.B Points 54001

Vous pouvez désérialiser en un dictionnaire.

 public class Item
{
    public string fajr { get; set; }
    public string sunrise { get; set; }
    public string zuhr { get; set; }
    public string asr { get; set; }
    public string maghrib { get; set; }
    public string isha { get; set; }
}
 

 var dict = JsonConvert.DeserializeObject<Dictionary<string, Item>>(json);
 

49voto

ken2k Points 24640

Bien que le dictionnaire soit la meilleure solution pour le cas spécifique que vous avez eu, la question que vous avez posée pourrait également être interprétée comme:

comment désérialiser des objets avec des noms de propriété qui ne peuvent pas être utilisés en C #?

Par exemple, si vous aviez

 {
    "0": "04:15",
    "zzz": "foo"
}
 

Solution: utilisez des annotations:

 public class Item
{
   [JsonProperty("0")]
   public string AnyName { get; set; }

   [JsonProperty("zzz")]
   public string AnotherName { get; set; }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X