C# 将JSON字符串转换为.Net模型

C# 将JSON字符串转换为.Net模型,c#,json,C#,Json,我试图将返回给我的JSON字符串映射到我拥有的.Net模型类中。JSON将是一个包含任意数量结果的数组,我想从这个方法返回一个List JSON如下所示: { "artists" : { "href" : "https://api.spotify.com/v1/search?query=tania+bowra&offset=0&limit=20&type=artist", "items" : [ { "external_urls" : {

我试图将返回给我的JSON字符串映射到我拥有的.Net模型类中。JSON将是一个包含任意数量结果的数组,我想从这个方法返回一个
List

JSON如下所示:

{
  "artists" : {
    "href" : "https://api.spotify.com/v1/search?query=tania+bowra&offset=0&limit=20&type=artist",
    "items" : [ {
      "external_urls" : {
        "spotify" : "https://open.spotify.com/artist/08td7MxkoHQkXnWAYD8d6Q"
      },
      "followers" : {
        "href" : null,
        "total" : 26
      },
      "genres" : [ ],
      "href" : "https://api.spotify.com/v1/artists/08td7MxkoHQkXnWAYD8d6Q",
      "id" : "08td7MxkoHQkXnWAYD8d6Q",
      "images" : [ {
        "height" : 640,
        "url" : "https://i.scdn.co/image/f2798ddab0c7b76dc2d270b65c4f67ddef7f6718",
        "width" : 640
      }, {
        "height" : 300,
        "url" : "https://i.scdn.co/image/b414091165ea0f4172089c2fc67bb35aa37cfc55",
        "width" : 300
      }, {
        "height" : 64,
        "url" : "https://i.scdn.co/image/8522fc78be4bf4e83fea8e67bb742e7d3dfe21b4",
        "width" : 64
      } ],
      "name" : "Tania Bowra",
      "popularity" : 2,
      "type" : "artist",
      "uri" : "spotify:artist:08td7MxkoHQkXnWAYD8d6Q"
    } ],
    "limit" : 20,
    "next" : null,
    "offset" : 0,
    "previous" : null,
    "total" : 1
  }
}
我正在尝试为此使用Json.Net。。。所以我从以下几点开始:

JObject jsonArtists = JObject.Parse(content);
这就是我被困的地方。我尝试过使用
JArray
的不同方法,但不确定这里需要使用什么语法,以及Json.Net将处理多少提升,而不是必须写出所有不同的属性映射


在本例中,我感兴趣的是从JSON中的
items
集合中获取一个数组,并将其放入
列表中,在您的示例中,JSON是单个对象(
{…}
),而不是列表(
[…]


您可以使用
JsonConvert.DeserializeObject(json)
直接进入您的模型。或者
JsonConvert.DeserializeObject(json)
如果
json
包含列表定义。

json在您的示例中是单个对象(
{…}
),而不是列表(
[…]


您可以使用
JsonConvert.DeserializeObject(json)
直接进入您的模型。或者如果
json
包含列表定义,则
JsonConvert.DeserializeObject(json)

您需要创建类来表示json数据。之后,将JSON数据导入类中

您应该查看的资源:


您需要创建类来表示JSON数据。之后,将JSON数据导入类中

您应该查看的资源:


在尝试序列化到对象之前,我使用以下解决方案直接跳转到数组。它起作用了

    var jsonArtists = JObject
        .Parse(content)
        .SelectToken("artists.items")
        .ToObject<List<MyObject>>();
var jsonArtists=JObject
.Parse(内容)
.SelectToken(“艺术家项目”)
.ToObject();

在尝试序列化到对象之前,我使用以下解决方案直接跳转到数组。它起作用了

    var jsonArtists = JObject
        .Parse(content)
        .SelectToken("artists.items")
        .ToObject<List<MyObject>>();
var jsonArtists=JObject
.Parse(内容)
.SelectToken(“艺术家项目”)
.ToObject();


如果您的模型与JSON直接匹配,您似乎希望使用
JsonConvert.DeserializeObject
。这就是我挂断JArray的原因,因为我将“无法将当前JSON对象(例如,{“name”:“value”})反序列化为类型”System.Collections.Generic.List`1[VoteYourMusic.Spotify.Artist]'因为该类型需要一个JSON数组(例如[1,2,3])才能正确反序列化。“是的,您的
artists
值不是数组。。。你应该改变你的模型或者改变JSON来匹配它。好的,谢谢,我明白你的意思了。我需要将“艺术家”节点下的“项目”数组转换为我的列表。因此,如果你想让生活更轻松,请创建一个包含项目属性的类。。。然后,如果您愿意,您可以将其映射到更好的模型类。如果您的模型直接匹配JSON,那么您似乎希望使用
JsonConvert.DeserializeObject
。这就是我挂断JArray的原因,因为我将“无法将当前JSON对象(例如,{“name”:“value”})反序列化为”System.Collections.Generic.List`1类型[VoteYourMusic.Spotify.Artist]”因为类型需要一个JSON数组(例如[1,2,3])才能正确反序列化。“是的,您的
artists
值不是数组……您应该更改模型或更改JSON以匹配它。好的,谢谢,我明白您的意思。我需要“artists”下的“items”数组。”节点转换为我的列表。因此,如果您想让生活变得简单,请创建一个包含Items属性的类…然后如果您愿意,可以将其映射到更好的模型类。您看过我提供的资源了吗?它显示了许多有助于您解决特定问题的示例。我建议不要使用Json.NET,如果您使用的是.NET 3.5+,请使用。谢谢,我来看看。我用的是4.6.1。@Kody:你为什么反对json.net?没有任何理由,这不是很有说服力。(我想现在连微软都在使用json.net,例如.net核心…)@JonSkeet,JavaScriptSerializer随附.NET 3.5+,比Json.NET更轻。Json.NET加载了此需求所不需要的功能。他所需要做的就是反序列化为一个对象。您看过我提供的资源了吗?它显示了许多有用的示例,可以在您的特定问题上帮助您。我建议您不要这样做Json.NET,如果您使用的是.NET 3.5+,请使用。谢谢,我会看一看。我使用的是4.6.1。@Kody:您为什么建议不要使用Json.NET?没有任何理由,这不是很有说服力。(我想现在连微软都在使用Json.NET,例如.NET core…)@JonSkeet,JavaScriptSerializer附带了.NET 3.5+,比Json.NET更轻。Json.NET加载了此需求所不需要的功能。他所需要做的就是反序列化到一个对象中。