Как я могу разобрать строку 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; }
}