C# 根据查询转换具有不同属性名称的Json字符串
我有一个Json字符串,如下所示:C# 根据查询转换具有不同属性名称的Json字符串,c#,json,deserialization,C#,Json,Deserialization,我有一个Json字符串,如下所示: {"Linkin Park":{"mbid_id":"f59c5520-5f46-4d2c-b2c4-822eabf53419","artistbackground": [{"id":"34862","url": "http://assets.fanart.tv/fanart/music/f59c5520-5f46-4d2c-b2c4-822eabf53419/artistbackground/linkin-park-4fcd2d8e4764f.jpg
{"Linkin Park":{"mbid_id":"f59c5520-5f46-4d2c-b2c4-822eabf53419","artistbackground":
[{"id":"34862","url":
"http://assets.fanart.tv/fanart/music/f59c5520-5f46-4d2c-b2c4-822eabf53419/artistbackground/linkin-park-4fcd2d8e4764f.jpg",
"likes":"4"},{"id":"3953","url":
"http://assets.fanart.tv/fanart/music/f59c5520-5f46-4d2c-b2c4-822eabf53419/artistbackground/linkin-park-4de522dac2c13.jpg","likes":"1"},{"id":"3954","url":
"http://assets.fanart.tv/fanart/music/f59c5520-5f46-4d2c-b2c4-822eabf53419/artistbackground/linkin-park-4de523586c57e.jpg","likes":"1"},{"id":"4251","url":"http://assets.fanart.tv/fanart/music/f59c5520-5f46-4d2c-b2c4-822eabf53419/artistbackground/linkin-park-4dea53983f4cf.jpg","likes":"1"},{"id":"30196","url":
"http://assets.fanart.tv/fanart/music/f59c5520-5f46-4d2c-b2c4-822eabf53419/artistbackground/linkin-park-4fabb53ba80a3.jpg","likes":"1"},{"id":"52251","url":
"http://assets.fanart.tv/fanart/music/f59c5520-5f46-4d2c-b2c4-822eabf53419/artistbackground/linkin-park-5058a071d9782.jpg","likes":"1"},{"id":"52252","url":"http://assets.fanart.tv/fanart/music/f59c5520-5f46-4d2c-b2c4-822eabf53419/artistbackground/linkin-park-5058a071d9f41.jpg","likes":"1"},{"id":"52254","url":
"http://assets.fanart.tv/fanart/music/f59c5520-5f46-4d2c-b2c4-822eabf53419/artistbackground/linkin-park-5058a0ebd0350.jpg","likes":"1"},{"id":"52255","url":"http://assets.fanart.tv/fanart/music/f59c5520-5f46-4d2c-b2c4-822eabf53419/artistbackground/linkin-park-5058a0ebd098b.jpg","likes":"1"},{"id":"63902","url":
"http://assets.fanart.tv/fanart/music/f59c5520-5f46-4d2c-b2c4-822eabf53419/artistbackground/linkin-park-50c2f127eeae6.jpg","likes":"1"},{"id":"3951","url":"http://assets.fanart.tv/fanart/music/f59c5520-5f46-4d2c-b2c4-822eabf53419/artistbackground/linkin-park-4de521f409aa2.jpg","likes":"0"},{"id":"3952","url":
"http://assets.fanart.tv/fanart/music/f59c5520-5f46-4d2c-b2c4-822eabf53419/artistbackground/linkin-park-4de5225cdd595.jpg","likes":"0"},
{"id":"28038","url":"http://assets.fanart.tv/fanart/music/f59c5520-5f46-4d2c-b2c4-822eabf53419/artistbackground/linkin-park-4f8ecbd3c004d.jpg","likes":"0"},{"id":"88261","url":"http://assets.fanart.tv/fanart/music/f59c5520-5f46-4d2c-b2c4-822eabf53419/artistbackground/linkin-park-51d1d122f3029.jpg","likes":"0"}]}}
如果你有时间阅读所有这些,你可能会发现我的问题。有一些Json节点根据我发送的查询更改名称。这次我发送了“Linkin Park”,我得到了名为Linkin Park的节点。如果我发送一个关于麦当娜的查询,我最终会得到一个叫做麦当娜的节点
如何将其反序列化到类中?您有几个选项:
var json = JsonConvert.DeserializeObject<Dictionary<string, StronglyTyped>>(jsonStr);
var data = json.Values.FirstOrDefault();
var json = JsonConvert.DeserializeObject<JObject>(jsonStr);
var topProp = json.Properties().FirstOrDefault().Name;
var data = json[topProp].ToObject<StronglyTyped>();
var json=JsonConvert.DeserializeObject(jsonStr);
var data=json.Values.FirstOrDefault();
使用Json.NET的#3示例:
var json = JsonConvert.DeserializeObject<Dictionary<string, StronglyTyped>>(jsonStr);
var data = json.Values.FirstOrDefault();
var json = JsonConvert.DeserializeObject<JObject>(jsonStr);
var topProp = json.Properties().FirstOrDefault().Name;
var data = json[topProp].ToObject<StronglyTyped>();
var json=JsonConvert.DeserializeObject(jsonStr);
var topProp=json.Properties().FirstOrDefault().Name;
var data=json[topProp].ToObject();
既然您知道该查询,最简单的解决方案是将{“%query%”:{
替换为{“MyCommonDeserializableClass”:{在反序列化字符串之前。:-)
但您应该确保JSON只包含一个这样的对象。从逻辑上看,它们似乎返回艺术家名称,因为可能有几个艺术家匹配查询。我使用的是Newtonsofts库,因此JSON.NET.Edited使用JSON.NETAwesome!的示例非常有效。谢谢!