EDIT: Я выяснил, как получить каждый ключ, теперь проблема перебирает каждую коллекцию. Решение внизу!Deserializing JSON с цифрами как ключи
Я пытаюсь разобрать JSON полезную нагрузку, которая имеет следующий формат:
{
"version": "1.1",
"0": {
"artist": "Artist 1",
"title": "Title 1"
},
"1": {
"artist": "Artist 2",
"title": "Title 2"
},
...
"29": {
"artist": "Artist 30",
"title": "Title 30"
}
}
мне не нужен ключ version
, поэтому я игнорирую его при кодировании моих классов. Это то, что я до сих пор:
public class Song
{
public string artist { get; set; }
public string title { get; set; }
}
Я проверил вокруг StackOverflow, и я видел людей, использующих Dictionary<int, string>
для подобных проблем, но он не похож на людей каждый объект JSON в корне. Я использую JSON.net для анализа всего.
В PHP я мог бы легко использовать json_decode()
и пройти через массив и извлечь всю необходимую информацию, но я в тупике от C#.
EDIT: Решение начинается ниже.
Я смотрел документацию JSON.net, и они использовали словари, поэтому я попытался использовать вложенные словари, и, похоже, это сработало!
Dictionary<int, Dictionary<string, string>> song = JsonConvert.DeserializeObject<Dictionary<int, Dictionary<string, string>>>(json);
И я могу получить доступ к artist
и title
свойства с помощью:
song[0]["artist"]
song[0]["title"]
соответственно.
Это устраняет необходимость в заранее подготовленных классах. Теперь у меня возникают проблемы с циклом каждого набора данных (например, артист и информация о названии для песни [1], песни [2], песни [3], ..., песни [n]).
Не можете ли вы использовать ключи словаря так: foreach (var key in songs.Keys) {var song = songs [key]; }? – atomaras
Если вы решили проблему, отправьте свое решение в качестве ответа и (однажды разрешите) принять его. Это будет означать этот вопрос, который будет разрешен для будущих пользователей сайта. Благодаря! –
Я думаю, что у вас возникнут проблемы с ключом «версия», если вы попытаетесь десериализовать словари. Я добавил ответ с альтернативным подходом. –