反序列化JSON使用NewtonSoft到.NET对象(或LINQ到也许JSON?) [英] deserializing JSON to .net object using NewtonSoft (or linq to json maybe?)

查看:112
本文介绍了反序列化JSON使用NewtonSoft到.NET对象(或LINQ到也许JSON?)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道有关于Newtonsoft几个帖子,所以希望这是不完全重复......我试图通过Kazaa软件的API返回的JSON数据转换成某种形式的一个不错的对象。

  Web客户端的客户端=新的WebClient();
流流= client.OpenRead(http://api.kazaa.com/api/v1/search.json?q=muse&type=Album);
StreamReader的读者=新的StreamReader(流);清单<串GT;列表= Newtonsoft.Json.JsonConvert.DeserializeObject<名单,LT;串GT;>(reader.Read()的ToString());的foreach(列表中的字符串项)
{
    Console.WriteLine(项目);
}//Console.WriteLine(reader.ReadLine());
stream.Close();

这JsonConvert行只是最近的一次我是想......我不太得到它,并希望通过要求你们要消除一些步法。我本来试图将其转换成字典什么的......实际上,我只需要钩住一对夫妇值出现在文档,以便判断,也许Newtonsoft的LINQ到JSON可能是一个更好的选择吗?思考/链接?

下面是将JSON返回数据的例子:

  {
  页:1,
  TOTAL_PAGES:8,
  total_entries:74,
  Q:MUSE,
  专辑:[
    {
      名:缪斯,
      永久链接:缪斯,
      cover_image_url:http://image.kazaa.com/images/69/01672812 1569 / Yaron_Herman_Trio /缪斯/ Yaron_Herman_Trio-Muse_1.jpg
      ID:93098,
      artist_nam E:亚龙赫尔曼三重奏
    },
    {
      名:缪斯,
      永久链接:缪斯,
      cover_image_url:HTT号码://image.kazaa.com/images/54/888880301154/Candy_Lo/Muse/Candy_Lo-Muse_1.jpg
      我D:102702,
      这位演出:\\ u76e7 \\ u5de7 \\ u97f3
    },
    {
      名:赦免,
      永久:赦免,
      cover_image_url:http://image.kazaa.com/images/65/093624873365/Mus E /赦免/缪斯-Absolution_1.jpg
      ID:48896,
      这位演出:缪斯
    },
    {
      名:死亡的解决方案,
      永久:赦免-2,
      cover_image_url:http://image.kazaa.com/i法师/825646911820分之20/缪斯/赦免/缪斯-Absolution_1.jpg
      ID:11857​​3,
      艺术家_name:缪斯
    },
    {
      名:黑洞与启示,
      永久:黑孔安D-启示录
      cover_image_url:http://image.kazaa.com/images/66/093624428466/缪斯/ Black_Holes_And_Revelations /缪斯-Black_Holes_And_Revelations_1.jpg
      ID:48813,
      这位演出:缪斯
    },
    {
      名:黑洞与启示,
      永久:布拉CK-孔和 - 启示录2
      cover_image_url:http://image.kazaa.com/images/86/ 825646911486 /缪斯/ Black_Holes_And_Revelations /缪斯-Black_Holes_And_Revelations_1 .JPG,
      ID:118543,
      这位演出:缪斯
    },
    {
      名:原点对称
      永久链接:原产地-OF-对称
      cover_image_url:http://image.kazaa.com/images/29/825646 912629 /缪斯/ Origin_Of_Symmetry /缪斯-Origin_Of_Symmetry_1.jpg
      ID:120491,
      阿蒂斯t_name:缪斯
    },
    {
      名:演艺圈,
      永久链接:娱乐台,
      cover_image_url:HTTP://image.kazaa.com/images/68/825646182268/Muse/Showbiz/Muse-Showbiz_1.jpg,
      ID:60444,
      这位演出:缪斯
    },
    {
      名:演艺圈,
      永久:娱乐台-2,
      cover_imag e_url:http://image.kazaa.com/images/50/825646912650/Muse/Showbiz/Muse-Showbiz_ 1.JPG,
      ID:118545,
      这位演出:缪斯
    },
    {
      名:反抗,
      永久:T他通电阻
      cover_image_url:http://image.kazaa.com/images/36/825646864836/缪斯/ The_Resistance /缪斯-The_Resistance_1.jpg
      ID:121171,
      这位演出:缪斯
    }
  ]
  per_page:10
}


做了一些更多的阅读,发现Newtonsoft的LINQ到JSON是正是我想要的......使用Web客户端,流的StreamReader和Newtonsoft..I可以打对Kazaa的JSON数据,提取一个网址,下载文件,并做这一切像7系code的!爱它

  Web客户端的客户端=新的WebClient();
流流= client.OpenRead(http://api.kazaa.com/api/v1/search.json?q=muse&type=Album);
StreamReader的读者=新的StreamReader(流);Newtonsoft.Json.Linq.JObject jObject = Newtonsoft.Json.Linq.JObject.Parse(reader.ReadLine());//代替的WriteLine,2或code在这里的3条线路使用Web客户端下载文件
Console.WriteLine((串)jObject [专辑] [0] [cover_image_url]);
stream.Close();


解决方案

如果你只需要得到从JSON对象的几个项目,我会用JSON.NET的LINQ到JSON JObject 类。例如:

  JToken令牌= JObject.Parse(stringFullOfJson);INT页=(INT)token.SelectToken(页);
INT总页数=(INT)token.SelectToken(TOTAL_PAGES);

我喜欢这种方法,因为你并不需要完全反序列化JSON对象。这是在方便使用的API,有时会缺少对象的属性,如Twitter会让你大吃一惊。

文件:<一href=\"http://james.newtonking.com/projects/json/help/index.html?topic=html/SerializingJSON.htm\">Serializing和反序列化JSON与Json.NET 和<一个href=\"http://james.newtonking.com/projects/json/help/index.html?topic=html/LINQtoJSON.htm\">LINQ以JSON与Json.NET

I know there a few posts about Newtonsoft so hopefully this isn't exactly a repeat...I'm trying to convert JSON data returned by Kazaa's API into a nice object of some kind

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();

that JsonConvert line is just the most recent one I was trying...I'm not quite getting it and was hoping to eliminate some footwork by asking you guys. I was originally trying to convert it into a Dictionary or something...and actually, I just need to snag a couple values in there so judging by the documentation, maybe Newtonsoft's Linq to JSON might be a better choice? Thoughts/Links?

Here is an example of the JSON return data:

{
  "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_nam e": "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
}


Did some more reading and found Newtonsoft's Linq to JSON is exactly what I wanted...using WebClient, Stream, StreamReader, and Newtonsoft..I can hit Kazaa for JSON data, extract a URL, download the file, and do it all in like 7 lines of code! Love it

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();

解决方案

If you just need to get a few items from the JSON object, I would use JSON.NET's Linq to JSON JObject class. For example:

JToken token = JObject.Parse(stringFullOfJson);

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

I like this approach because you don't need to fully deserialize the JSON object. This comes in handy with APIs that can sometimes surprise you with missing object properties, like Twitter.

Documentation: Serializing and Deserializing JSON with Json.NET and LINQ to JSON with Json.NET

这篇关于反序列化JSON使用NewtonSoft到.NET对象(或LINQ到也许JSON?)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆