C# 将JSON字符串转换为.Net模型
我试图将返回给我的JSON字符串映射到我拥有的.Net模型类中。JSON将是一个包含任意数量结果的数组,我想从这个方法返回一个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" : {
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加载了此需求所不需要的功能。他所需要做的就是反序列化到一个对象中。