2016-07-11 8 views
1

Ich versuche, meine Web Request JSON-Ausgabe zu nehmen und es zu analysieren. Hier ist die AusgabeJSON Deserialize-Objekt HTTPWebResponse

{ 
    "kind":"internal", 
    "name":"SplashPageToggle_dg", 
    "fullPath":"SplashPageToggle_dg", 
    "generation":1255326, 
    "selfLink":"https://link", 
    "type":"stri ng", 
    "records":[ 
     { 
      "name":"enable_app1", 
      "data":"0" 
     }, 
     { 
      "name":"enable_app2", 
      "da ta":"0" 
     }, 
     { 
      "name":"enable_app3", 
      "data":"0" 
     }, 
     { 
      "name":"enable_app4", 
      "data":"0" 
     }, 
     { 
      "name":"enable_app5", 
      "data":"0" 
     }, 
     { 
      "name":"enable_app6", 
      "data":"1" 
     }, 
     { 
      "name":"enable_app7", 
      "data":"0" 
     }, 
     { 
      "name":"enable_app8", 
      "data":"0" 
     }, 
     { 
      "name":"enable_app9", 
      "data":"0" 
     }, 
     { 
      "name":"enable_app10", 
      "data":"0" 
     } 
    ] 
} 

ich öffentliche Klassen für diese Ergebnisse

public class RootObject 
{ 
    public string kind { get; set; } 
    public string name { get; set; } 
    public string fullPath { get; set; } 
    public int generation { get; set; } 
    public string selfLink { get; set; } 
    public string type { get; set; } 
    public List<Record> records { get; set; } 
} 

public class Record 
{ 
    public string name { get; set; } 
    public string data { get; set; } 
} 

erstellt haben, wenn ich versuche, die Record-Klasse deserialisieren und den Namen wählen, erhalte ich den Namen aus der RootObject Klasse. Hier ist mein Code

static void Main(string[] args) 
{ 
    string url = "URL";  
    HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(url); 
    getRequest.Method = "GET"; 
    getRequest.Credentials = new NetworkCredential("UN", "PW"); 
    ServicePointManager.ServerCertificateValidationCallback = new 
     RemoteCertificateValidationCallback 
     (
     delegate { return true; } 
    ); 

    var getResponse = (HttpWebResponse)getRequest.GetResponse();  
    Stream newStream = getResponse.GetResponseStream(); 
    StreamReader sr = new StreamReader(newStream);  
    var result = sr.ReadToEnd();  
    var splashInfo = JsonConvert.DeserializeObject<Record>(result); 

    Console.WriteLine(splashInfo.name); 
    Console.ReadLine(); 
} 

Antwort

4

Sie versuchen, Ihr JSON in die falsche Klasse zu deserialisieren.

Ändern Sie diese Zeile:

var splashInfo = JsonConvert.DeserializeObject<Record>(result); 

dazu:

var splashInfo = JsonConvert.DeserializeObject<RootObject>(result); 

Fiddle: https://dotnetfiddle.net/2xR7hO

+1

Und nur für das OP wird splashInfo enthalten jetzt eine entserialisierten Liste der Rekord-Objekte, so dass Sie kann splashInfo.records aufrufen, um alle zurückzugeben. – Dispersia

+0

Ehrfürchtig. Danke Leute. – maltman

+0

@dispersie. Wie kann die Liste automatisch ausgefüllt werden? Ist es möglich, fx zu sagen? List.add() oder etwas? Ich bekomme nicht, wie die Liste automatisch von der Json – uba2012