2010-02-25 4 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, вы можете десериализации объекта как это:

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

Вы бы определить объект Blogsearch так:

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

Вы сохранить определения объектов до тех пор, пока есть все те, вас интересует.

+0

Что произойдет, если это не правильный тип сообщения? это исключение, или оно возвращает null? –

0

Если вы отправляете свой объект JSON raw в веб-API, тогда вы столкнетесь с этой проблемой. Deserializer ожидает фактическую строку, а не объект или массив. Поскольку он использует JsonMediaTypeFormatter, он не знает, как перевести то, что ему передается.

Вам нужно сделать следующее, чтобы избежать null:

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

Для получения дополнительной информации см this article.

Смежные вопросы