使用数字作为键反序列化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
来解决类似的问题,但看起来人们根本没有每个JSON对象。 我正在使用JSON.net来解析所有内容。
在PHP中,我可以轻松地使用json_decode()
并遍历数组并提取我需要的所有信息,但我被C#难倒。
编辑:解决方案从下面开始。
我看了JSON.net文档,他们使用了词典,所以我尝试使用嵌套词典,它似乎工作!
Dictionary<int, Dictionary> song = JsonConvert.DeserializeObject<Dictionary<int, Dictionary>>(json);
我可以通过以下方式访问artist
和title
属性:
song[0]["artist"] song[0]["title"]
分别。
这消除了对预构建类的需要。 现在我无法遍历每组数据集(例如歌曲[1],歌曲[2],歌曲[3],…,歌曲[n])的艺术家和标题信息。
如果您尝试使用上面的JSON反序列化为Dictionary
,那么您将遇到version
密钥的问题,因为它不符合字典的数据格式( version
不是int
和1.1
不是Dictionary
)。 我知道你说你现在“忽视它”,但这意味着它将来会存在,所以你需要处理它。
如果您不想拥有预定义的类,那么最好使用Json.Net的LINQ-to-JSON API来处理数据。 以下是使用此方法获取所需数据的方法:
class Program { static void Main(string[] args) { string 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"" } }"; JObject songs = JObject.Parse(json); foreach (JProperty song in songs.Properties()) { if (song.Name == "version") continue; // skip "version" property Console.WriteLine("Song " + song.Name + " artist: " + song.Value["artist"]); Console.WriteLine("Song " + song.Name + " title: " + song.Value["title"]); } } }
输出:
Song 0 artist: Artist 1 Song 0 title: Title 1 Song 1 artist: Artist 2 Song 1 title: Title 2 Song 29 artist: Artist 30 Song 29 title: Title 30
文档中还有许多其他示例。
上述就是C#学习教程:使用数字作为键反序列化JSON分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1012312.html