使用Newtonsoft将JSON反序列化为.NET对象(或者LINQ为JSON?)

本杰明

我知道有一些关于Newtonsoft的帖子,所以希望这不是重复...我正在尝试将Kazaa API返回的JSON数据转换为某种不错的对象

WebClient client = new WebClient();
Stream stream = client.OpenRead("http://api.kazaa.com/api/v1/search.json?q=muse&type=Album");
StreamReader reader = new StreamReader(stream);

List<string> list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(reader.Read().ToString());

foreach (string item in list)
{
    Console.WriteLine(item);
}

//Console.WriteLine(reader.ReadLine());
stream.Close();

JsonConvert系列只是我正在尝试的最新系列...我不太了解它,希望通过询问大家来消除一些麻烦。我最初试图将其转换为Dictionary或其他内容……实际上,我只需要在那里获取几个值,因此从文档来看,也许Newtonsoft的LINQ to JSON可能是更好的选择?有想法/链接吗?

这是JSON返回数据的示例:

{
  "page": 1,
  "total_pages": 8,
  "total_entries": 74,
  "q": "muse",
  "albums": [
    {
      "name": "Muse",
      "permalink": "Muse",
      "cover_image_url": "http://image.kazaa.com/images/69/01672812 1569/Yaron_Herman_Trio/Muse/Yaron_Herman_Trio-Muse_1.jpg",
      "id": 93098,
      "artist_name": "Yaron Herman Trio"
    },
    {
      "name": "Muse",
      "permalink": "Muse",
      "cover_image_url": "htt p://image.kazaa.com/images/54/888880301154/Candy_Lo/Muse/Candy_Lo-Muse_1.jpg",
      "i d": 102702,
      "artist_name": "\u76e7\u5de7\u97f3"
    },
    {
      "name": "Absolution",
      "permalink": " Absolution",
      "cover_image_url": "http://image.kazaa.com/images/65/093624873365/Mus e/Absolution/Muse-Absolution_1.jpg",
      "id": 48896,
      "artist_name": "Muse"
    },
    {
      "name": "Ab solution",
      "permalink": "Absolution-2",
      "cover_image_url": "http://image.kazaa.com/i mages/20/825646911820/Muse/Absolution/Muse-Absolution_1.jpg",
      "id": 118573,
      "artist _name": "Muse"
    },
    {
      "name": "Black Holes And Revelations",
      "permalink": "Black-Holes-An d-Revelations",
      "cover_image_url": "http://image.kazaa.com/images/66/093624428466/ Muse/Black_Holes_And_Revelations/Muse-Black_Holes_And_Revelations_1.jpg",
      "id": 48813,
      "artist_name": "Muse"
    },
    {
      "name": "Black Holes And Revelations",
      "permalink": "Bla ck-Holes-And-Revelations-2",
      "cover_image_url": "http://image.kazaa.com/images/86/ 825646911486/Muse/Black_Holes_And_Revelations/Muse-Black_Holes_And_Revelations_1 .jpg",
      "id": 118543,
      "artist_name": "Muse"
    },
    {
      "name": "Origin Of Symmetry",
      "permalink": "Origin-Of-Symmetry",
      "cover_image_url": "http://image.kazaa.com/images/29/825646 912629/Muse/Origin_Of_Symmetry/Muse-Origin_Of_Symmetry_1.jpg",
      "id": 120491,
      "artis t_name": "Muse"
    },
    {
      "name": "Showbiz",
      "permalink": "Showbiz",
      "cover_image_url": "http: //image.kazaa.com/images/68/825646182268/Muse/Showbiz/Muse-Showbiz_1.jpg",
      "id": 60444,
      "artist_name": "Muse"
    },
    {
      "name": "Showbiz",
      "permalink": "Showbiz-2",
      "cover_imag e_url": "http://image.kazaa.com/images/50/825646912650/Muse/Showbiz/Muse-Showbiz_ 1.jpg",
      "id": 118545,
      "artist_name": "Muse"
    },
    {
      "name": "The Resistance",
      "permalink": "T he-Resistance",
      "cover_image_url": "http://image.kazaa.com/images/36/825646864836/ Muse/The_Resistance/Muse-The_Resistance_1.jpg",
      "id": 121171,
      "artist_name": "Muse"
    }
  ],
  "per_page": 10
}

我做了一些进一步的阅读,发现Newtonsoft的LINQ to JSON正是我想要的...使用WebClient,Stream,StreamReader和Newtonsoft ...我可以在Kazaa中获取JSON数据,提取URL,下载文件并进行操作就像七行代码一样!我喜欢它。

WebClient client = new WebClient();
Stream stream = client.OpenRead("http://api.kazaa.com/api/v1/search.json?q=muse&type=Album");
StreamReader reader = new StreamReader(stream);

Newtonsoft.Json.Linq.JObject jObject = Newtonsoft.Json.Linq.JObject.Parse(reader.ReadLine());

// Instead of WriteLine, 2 or 3 lines of code here using WebClient to download the file
Console.WriteLine((string)jObject["albums"][0]["cover_image_url"]);
stream.Close();

这篇文章获得了很多点击,我认为包括注释中讨论的“使用”位可能会有所帮助。

using(var client = new WebClient())
using(var stream = client.OpenRead("http://api.kazaa.com/api/v1/search.json?q=muse&type=Album"))
using (var reader = new StreamReader(stream))
{
    var jObject = Newtonsoft.Json.Linq.JObject.Parse(reader.ReadLine());
    Console.WriteLine((string) jObject["albums"][0]["cover_image_url"]);
}
奥秘

如果您只需要从JSON对象中获取一些项,则可以使用Json.NET的LINQ to JSONJObject类。例如:

JToken token = JObject.Parse(stringFullOfJson);

int page = (int)token.SelectToken("page");
int totalPages = (int)token.SelectToken("total_pages");

我喜欢这种方法,因为您不需要完全反序列化JSON对象。API随手可得,有时可能会因缺少对象属性(例如Twitter)而使您感到惊讶。

文档:序列化和反序列化JSON与Json.NETLINQ到JSON与Json.NET

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用NewtonSoft将JSON对象反序列化为.Net对象

使用Newtonsoft将Json反序列化为C#中的对象列表

Newtonsoft JSON反序列化为null

使用 newtonsoft json 将 double.NaN 反序列化为 null

使用Newtonsoft将数组的JSON数组反序列化为元组列表

VB.NET将Newtonsoft JSON动态反序列化为对象

使用LocalDateTime字段将JSON反序列化为对象

如何使用SubType将json反序列化为对象?

使用RestSharp将JSON反序列化为对象或数组

将 Json 反序列化为对象

使用Newtosoft Json将Json反序列化为null

使用Jackson将反序列化JSON数组反序列化为单个Java对象

如何使用Jackson将反序列化的JSON反序列化为忽略键的对象?

使用动态键将JSON反序列化为字典

使用动态密钥将JSON反序列化为Object

使用Jackson将JSON反序列化为ArrayList <POJO>

如何使用JavaScriptSerializer将JSON反序列化为元组

Newtonsoft.Json-将通用对象反序列化为包装类

Newtonsoft json将复杂对象反序列化为具有不同名称的类

将 json 反序列化为对象 json.net

将JSON反序列化为子类

使用Jackson将反序列化JSON数组反序列化为Map

Newtonsoft.Json - 将 JSON 反序列化为自定义 JObject

将Json对象反序列化为.NET对象

使用Json.net将JSON对象反序列化为动态对象

Newtonsoft Json将具有布尔属性的动态列表反序列化为字符串

使用PHP中的类型将嵌套对象序列化/反序列化为JSON

如何使用Jackson将Java Enums序列化和反序列化为JSON对象

如何将JSON反序列化为.net对象