使用JSON.NET解析JSON

3

我有一个 JSON 字符串:

 {"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进行解析,但是它返回的是null。

以下是我的代码:

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

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

但是它给我这个错误:
无法将{null}转换为字符串。
4个回答

6
使用Json.Net,您可以像这样反序列化对象:
BlogSearch search = JsonConvert.DeserializeObject<BlogSearch>(content);

您可以这样定义BlogSearch对象:
[JsonObject(MemberSerialization.OptIn)]
public class BlogSearch
{
    [JsonProperty(PropertyName = "responseData")]
    public BlogSearchResponse SearchResponse { get; set; }
}

您可以定义对象,直到您拥有所有感兴趣的对象。


如果不是正确类型的消息会发生什么?会抛出异常还是返回null? - Alex Reinking

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"];

你想要将什么内容存入名字变量中?

1

0
如果您将JSON对象原始发布到Web API,则会遇到此问题。反序列化程序期望实际字符串而不是对象或数组。因为它使用了JsonMediaTypeFormatter,所以它不知道如何翻译传递给它的内容。
为避免null,您需要执行以下操作:
public HttpResponseMessage postBlogSearch([FromBody] JToken json){
    var jsonResult = JObject.Parse(json.ToString());
    var name = jsonResult["responseData"].ToString();
}

了解更多信息请参阅本文


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接