Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据查询转换具有不同属性名称的Json字符串_C#_Json_Deserialization - Fatal编程技术网

C# 根据查询转换具有不同属性名称的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

我有一个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",
"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的节点。如果我发送一个关于麦当娜的查询,我最终会得到一个叫做麦当娜的节点


如何将其反序列化到类中?

您有几个选项:

  • 字典
  • 动态的
  • 然后反序列化为强类型的一个节点(假设子树的结构和命名是静态的)(这是基于Newtonsoft.JSON的)
  • 您使用什么库进行JSON反序列化

    使用Json.NET的#1示例:

    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!的示例非常有效。谢谢!