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

Я использую библиотеку NewtonSoft JSON Convert для анализа и преобразования строки JSON в объекты C #. Но теперь я столкнулся с действительно неудобной строкой JSON, и я не могу преобразовать ее в объект C #, потому что я не могу сделать class C # из этой строки 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" } } 

Класс C #, необходимый для синтаксического анализа этой строки 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; } } 

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

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

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

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

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

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

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

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

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

 public class Item { [JsonProperty("0")] public string AnyName { get; set; } [JsonProperty("zzz")] public string AnotherName { get; set; } } 
  • Как разобрать объект JSON на C #, если я заранее не знаю ключ?
  • Что такое эквивалент JSON.NET XPath, SelectNodes XML, SelectSingleNode?
  • C # WCF REST. Как вы используете сериализатор JSON.Net вместо стандартного DataContractSerializer?
  • Deserializing JSON, когда иногда массивы, а иногда и объекты
  • Порядок сериализованных полей с использованием JSON.NET
  • Как сообщить Json.Net глобально применить StringEnumConverter ко всем enumsм
  • Альтернативное имя свойства при десериализации
  • Как преобразовать escape-строку JSON в объект JSON?
  • Объединение двух массивов Json.NET путем конкатенации содержащихся элементов
  • Не удалось загрузить файл или сборку «Newtonsoft.Json» или одну из его зависимостей. Определение манифеста не соответствует ссылке на сборку
  • Newtonsoft JSON Deserialize
  • Давайте будем гением компьютера.