c# json json.net

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



json.net (2)

Puedes deserializar a 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);

He estado usando la biblioteca NewtonSoft JSON Convert para analizar y convertir cadena JSON a objetos C #. Pero ahora me encontré con una cadena JSON realmente incómoda y no puedo convertirla en un objeto C # porque no puedo crear una clase C # a partir 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 # requerida para analizar esta cadena JSON debería ser así:

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 no puede ser una verdadera clase de C # porque sabemos que los nombres de clase no pueden comenzar con un número.

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


Si bien el diccionario es la mejor solución para el caso específico que tenía, la pregunta que hizo también podría interpretarse como:

¿Cómo deserializo objetos con nombres de propiedad que no se pueden usar en C #?

Por ejemplo, ¿qué pasaría si tuviera

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

Solución: use anotaciones:

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