2017-09-23 2 views
0

Ziemlich neu zu C# und würde jede Hilfe zu schätzen wissen.Deserialisierung von Json Return Null in richtig formatiert JSON

Der folgende Fehler wird angezeigt: "Objektverweis nicht auf eine Instanz eines Objekts festgelegt." Wenn ich versuche, auf eine rezeptureingeführte.Ergebnisliste [0] .title oder andere Elemente in der Liste zuzugreifen.

Ich bin in der Lage, rezeptreturned.title erfolgreich zurück, jedoch.

Hier ist die api URL mit JSON-Format:

http://www.recipepuppy.com/api/?i=onions,garlic&q=omelet&p=3

protected void getButton_Click(object sender, EventArgs e) 
    { 
     string url = string.Format("http://www.recipepuppy.com/api/?i={0}&q={1}", ingredientsTextBox.Text, recipetypeTextBox.Text); 

     using (WebClient client = new WebClient()) 
     { 
      string json = client.DownloadString(url); 
      RecipeInfo recipeinforeturned = new RecipeInfo(); 
      recipeinforeturned = (new JavaScriptSerializer()).Deserialize <RecipeInfo>(json); 
      //next need a loop to go through each list item and add to ResultsListBox to end of recipies 
      Label1.Text = recipeinforeturned.title; 
      for (int i = 0; i < recipeinforeturned.resultslist.Count; i++) 

      { 
       resultsListBox.Items.Add(recipeinforeturned.resultslist[i].title); 
       resultsListBox.Items.Add(recipeinforeturned.resultslist[i].ingredients); 
       resultsListBox.Items.Add(Environment.NewLine); 
      } 
     } 


    } 

    public class RecipeInfo 
    {  
     public string title { get; set; } 
     public string version { get; set; } 
     public string href { get; set; } 
     public List<Results> resultslist { get; set; } 
    } 

    public class Results 

    { 
     public string title { get; set; } 
     public string href { get; set; } 
     public string ingredients { get; set; } 
     public string thumbnail { get; set; } 
    } 
} 

} Jede Hilfe wäre sehr dankbar.

+0

1. Verwenden Sie http://jsonutils.com, um Ihre Klassen aus JSON (-Url) zu erstellen. 2. Verwenden Sie JSON.Net für JSON Serialisierung –

Antwort

0

Sie müssen umbenennen:

public List<Results> resultslist { get; set; } 

zu

public List<Results> results { get; set; } 

Ansonsten Deserializer für resultslist Objekt in JSON suchen, aber nicht finden können, daher gibt null

0

Sie können versuchen, den Feldtyp der Zeichenfolge "Version" zu verdoppeln.

public class RootObject 
{ 
    public string title { get; set; } 
    public double version { get; set; } 
    public string href { get; set; } 
    public List<Result> results { get; set; } 
} 
+0

tatsächlich löste Sie mein Problem. Ich habe die Liste in der Klasse mit dem falschen Namen angerufen. Ich habe es gerade erwischt als ich deine Antwort ansah. Ich danke dir sehr!! – JBiz