28 votos

¿Cómo puedo analizar una cadena JSON que haría ilegales identificadores de C#?

He estado usando NewtonSoft JSON Convertir la biblioteca para analizar y convertir cadena JSON a C# objetos. Pero ahora que he venido a través de una realidad incómoda cadena JSON y soy incapaz de convertir en C# objeto porque yo no puedo hacer una clase de C# de esta cadena JSON.

Aquí está la cadena 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 clase C# necesarios para analizar esta cadena JSON debe ser como este:

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; }
}

Pero esto no puede ser una verdadera clase de C# porque sabemos que los nombres de Clase no puede empezar con un número.

Será genial si alguien puede sugerir cómo analizar este tipo de cadena json.

42voto

L.B Puntos 54001

Puede deserializar un diccionario.

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);

38voto

ken2k Puntos 24640

Mientras que el diccionario es la mejor solución para el caso específico que tenía, la pregunta podría interpretarse como:

¿Cómo deserializar objetos con nombres de propiedad que no se puede utilizar en C#?

Por ejemplo qué pasa si usted tenía

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

Solución: use las anotaciones:

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

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: