2010-02-25 104 views
2

我有一个JSON字符串:JSON解析与JSON.NET

{"responseData": 
    {"results": [ 
     {"GsearchResultClass": "GblogSearch", 
      "title":"\u003cb\u003eParis Hilton\u003c/b\u003e shops at Sydney Michelle boutique in the Beverly Glen \u003cb\u003e...\u003c/b\u003e", 
      "titleNoFormatting":"Paris Hilton shops at Sydney Michelle boutique in the Beverly Glen ...", 
      "postUrl":"http://www.celebrity-gossip.net/celebrities/hollywood/paris-hilton-sydney-michelle-stockup-215844/", 
      "content":"\u003cb\u003eParis Hilton\u003c/b\u003e shops at Sydney Michelle boutique in the Beverly Glen Mall - \u003cb\u003eParis Hilton\u003c/b\u003e: Sydney Michelle Stockup.", 
      "author":"The Gossip Girls at (c) gossipgirls.com", 
      "blogUrl":"http://www.celebrity-gossip.net/", 
      "publishedDate":"Tue, 23 Feb 2010 22:26:00 -0800" 
     }, 
     {"GsearchResultClass":"GblogSearch", 
      "title":"\u003cb\u003eParis Hilton\u003c/b\u003e having wardrobe woes as she met with her lawyer", 
      "titleNoFormatting":"Paris Hilton having wardrobe woes as she met with her lawyer", 
      "postUrl":"http://www.celebrity-gossip.net/celebrities/hollywood/paris-hiltons-wardrobe-woes-215855/", 
      "content":"\u003cb\u003eParis Hilton\u003c/b\u003e having wardrobe woes as she met with her lawyer - \u003cb\u003eParis Hilton's\u003c/b\u003e Wardrobe Woes.", 
      "author":"The Gossip Girls at (c) gossipgirls.com","blogUrl":"http://www.celebrity-gossip.net/", 
      "publishedDate":"Wed, 24 Feb 2010 11:07:56 -0800" 
     }, 
     {"GsearchResultClass":"GblogSearch", 
      "title":"HOT GALLERY: \u003cb\u003eParis Hilton\u003c/b\u003e Turns Her Frown Upside Down | OK \u003cb\u003e...\u003c/b\u003e", 
      "titleNoFormatting":"HOT GALLERY: Paris Hilton Turns Her Frown Upside Down | OK ...", 
      "postUrl":"http://www.okmagazine.com/2010/02/hot-gallery-paris-hilton-turns-her-frown-upside-down/", 
      "content":"\u003cb\u003eParis Hilton\u003c/b\u003e kept her game face on yesterday as she headed to a meeting in Hollywood. The socialite maintained her composure, but eventually cracked a smile, 201002.", 
      "author":"Brittany Talarico", 
      "blogUrl":"http://www.okmagazine.com/", 
      "publishedDate":"Wed, 24 Feb 2010 07:57:10 -0800" 
     }, 
     {"GsearchResultClass":"GblogSearch", 
      "title":"Love It Or Hate It: \u003cb\u003eParis Hilton\u003c/b\u003e | ImNotObsessed.com", 
      "titleNoFormatting":"Love It Or Hate It: Paris Hilton | ImNotObsessed.com", 
      "postUrl":"http://www.imnotobsessed.com/2010/02/24/love-it-or-hate-it-paris-hilton", 
      "content":"tweetmeme_url \u003d \"http://www.imnotobsessed.com/2010/02/24/love-it-or-hate-it-\u003cb\u003eparis\u003c/b\u003e-\u003cb\u003ehilton\u003c/b\u003e\";tweetmeme_element_id \u003d '#tweetmeme-widget-139430e62dc37d7a2aa71840d6444572';That's some dress \u003cb\u003eParis Hilton\u003c/b\u003e was seen wearing while shopping in ...", 
      "author":"Vera", 
      "blogUrl":"http://www.imnotobsessed.com/", 
      "publishedDate":"Wed, 24 Feb 2010 10:44:28 -0800" 
     }], 
    "cursor": { 
     "pages": [ 
      {"start":"0","label":1}, 
      {"start":"4","label":2}, 
      {"start":"8","label":3}, 
      {"start":"12","label":4}, 
      {"start":"16","label":5}, 
      {"start":"20","label":6}, 
      {"start":"24","label":7}, 
      {"start":"28","label":8}], 
     "estimatedResultCount":"8035445", 
     "currentPageIndex":0, 
     "moreResultsUrl":"http://blogsearch.google.com/blogsearch?oe\u003dutf8\u0026ie\u003dutf8\u0026safe\u003dactive\u0026source\u003duds\u0026start\u003d0\u0026hl\u003den\u0026q\u003dParis+Hilton" 
     } 
    }, 
"responseDetails": null, 
"responseStatus": 200} 

版。增加了可读性

换行符和我使用Json.NET解析它,但它给了我一个空

这是我的代码:注

JObject o = JObject.Parse(json); // <- where json is the string above 

string name = (string)o["responseData"]; 

但它给我这个错误:

 
Can not convert {null} to String. 

回答

5

你试过类似的东西吗?

string gsearchresultclass= (string)o["responseData"]["results"][0]["GsearchResultClass"]; 
string title= (string)o["responseData"]["results"][0]["title"]; 
string titlenoformat= (string)o["responseData"]["results"][0]["titleNoFormatting"]; 
string url = (string)o["responseData"]["results"][0]["postUrl"]; 
string content = (string)o["responseData"]["results"][0]["content"]; 
string author = (string)o["responseData"]["results"][0]["author"]; 
string blogurl = (string)o["responseData"]["results"][0]["blogUrl"]; 
string date = (string)o["responseData"]["results"][0]["publishedDate"]; 

究竟什么是你想进入名变量?

6

使用Json.Net,你可以反序列化对象是这样的:直到你把所有的那些

[JsonObject(MemberSerialization.OptIn)] 
public class BlogSearch 
{ 
    [JsonProperty(PropertyName = "responseData")] 
    public BlogSearchResponse SearchResponse { get; set; } 
} 

您保持定义对象:

BlogSearch search = JsonConvert.DeserializeObject<BlogSearch>(content); 

你会定义博客搜索的对象这样你有兴趣。

+0

如果它不是正确类型的消息,会发生什么情况?抛出异常还是返回null? – 2015-08-28 23:27:06

0

如果你张贴你的JSON对象原始的Web API,然后你会遇到这个问题。反序列化器期待一个实际的字符串,而不是一个对象或一个数组。因为它使用的是JsonMediaTypeFormatter,所以它不知道如何翻译传递给它的内容。

你需要做以下,以避免null

public HttpResponseMessage postBlogSearch([FromBody] JToken json){ 
    var jsonResult = JObject.Parse(json.ToString()); 
    var name = jsonResult["responseData"].ToString(); 
} 

欲了解更多信息,请参阅this article