2016-08-03 36 views
0

Ich versuche dieses link deserialize, aber ich bekomme diesen Fehler immer wieder.JSON.NET Fehler beim Lesen der Zeichenfolge. Unerwartetes Token: StartObject. Pfad 'responseData',

Fehler beim Lesen der Zeichenfolge. Unerwartetes Token: StartObject. Pfad 'Antwortdaten'.

Von dem, was ich gegoogelt habe, scheint das Problem der Aufbau meines Objekts zu sein, in dem ich versuche, zu deserialisieren. Unten ist meine Klasse:

public class FeedSearchResult 
{ 
    [JsonProperty("responseData")] 
    public String ResponseData { get; set; } 

    [JsonProperty("query")] 
    public String Query { get; set; } 

    [JsonProperty("entries")] 
    public string[] Entries { get; set; } 

    [JsonProperty("responseDetails")] 
    public object ResponseDetails { get; set; } 

    [JsonProperty("responseStatus")] 
    public String ResponseStatsu { get; set; } 
} 

public class ResultItem 
{ 
    [JsonProperty("title")] 
    public String Title { get; set; } 

    [JsonProperty("url")] 
    public String Url { get; set; } 

    [JsonProperty("link")] 
    public String Link { get; set; } 
} 

Was mache ich falsch in meiner Klasse? Jede Hilfe würde sehr geschätzt werden.

+1

Ihr Datenmodell das zurückgegebene JSON nicht wirklich übereinstimmen; 'responseData' ist ein Objekt, aber Sie haben es stattdessen als String. Laden Sie das JSON auf http://json2csharp.com/ hoch, um ein korrigiertes Datenmodell zu erhalten. – dbc

+0

Dang. Ich hätte ehrlich gesagt nach einem solchen Tool suchen sollen. Vielen Dank Alter. –

Antwort

1

Ihr Datenmodell hat nur zwei Ebenen der Verschachtelung, aber der zurückgegebene JSON hat drei. Wenn Sie auf der formatierten JSON aussehen https://jsonformatter.curiousconcept.com/ verwenden, werden Sie sehen:

{ 
    "responseData":{ 
     "query":"Official Google Blogs", 
     "entries":[ 
     { 
      "url":"https://googleblog.blogspot.com/feeds/posts/default", 
      "title":"\u003cb\u003eOfficial Google Blog\u003c/b\u003e", 
      "contentSnippet":"\u003cb\u003eOfficial\u003c/b\u003e weblog, with news of new products, events and glimpses of life inside \u003cbr\u003e\n\u003cb\u003eGoogle\u003c/b\u003e.", 
      "link":"https://googleblog.blogspot.com/" 
     }, 

Insbesondere Ihr Datenmodell hat responseData als String, wenn es ein enthaltenes Objekt sein muss. Dies ist die spezifische Ursache der Ausnahme.

Wenn Sie die JSON http://json2csharp.com/ laden wird die folgende Datenmodell erhalten, das verwendet werden kann dieses JSON deserialisieren:

public class ResultItem 
{ 
    public string url { get; set; } 
    public string title { get; set; } 
    public string contentSnippet { get; set; } 
    public string link { get; set; } 
} 

public class ResponseData 
{ 
    public string query { get; set; } 
    public List<ResultItem> entries { get; set; } 
} 

public class RootObject 
{ 
    public ResponseData responseData { get; set; } 
    //Omitted since type is unclear. 
    //public object responseDetails { get; set; } 
    public int responseStatus { get; set; } 
}