Как я могу разобрать строку JSON, которая приведет к незаконным идентификаторам С#?

Я использую библиотеку NewtonSoft JSON Convert для анализа и преобразования строки JSON в объекты С#. Но теперь я столкнулся с действительно неудобной строкой JSON, и я не могу преобразовать ее в объект С#, потому что я не могу сделать класс С# из этой строки JSON.

Вот строка 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"
 } 
}

Класс С#, необходимый для синтаксического анализа этой строки JSON, должен выглядеть следующим образом:

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

Но он не может быть истинным классом С#, потому что мы знаем, что имена классов не могут начинаться с числа.

Будет очень здорово, если кто-нибудь может предложить, как разбирать такой тип json-строки.

Ответ 1

Вы можете десериализовать словарь.

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

Ответ 2

В то время как словарь является лучшим решением для конкретного случая, который у вас был, заданный вами вопрос также может быть интерпретирован как:

как десериализовать объекты с именами свойств, которые нельзя использовать в С#?

Например, что, если у вас

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

Решение: используйте аннотации:

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

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