2016-07-11 7 views
1

Я пытаюсь выполнить вывод JSON для веб-запроса и проанализировать его. Вот выходJSON Deserialize Object 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" 
     } 
    ] 
} 

Я создал общественные классы для этих результатов

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; } 
} 

Когда я пытаюсь десериализация класса записи и выбрать имя, я получаю имя из класса RootObject. Вот мой код

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(); 
} 

ответ

4

Вы пытаетесь десериализовать свой JSON в неправильном классе.

Изменить эту строку:

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

к этому:

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

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

+1

И только для OP, splashInfo теперь будет содержать десериализованный список записей объектов, так что вы может вызвать splashInfo.records, чтобы вернуть их все. – Dispersia

+0

Awesome. Спасибо, парни. – maltman

+0

@Dispersia. Как список может быть заполнен автоматически? Можно ли сказать fx. List.add() или что-то еще? Я не понимаю, как список автоматически заполняется из Json – uba2012