2016-11-10 3 views
0

У меня есть веб-служба, которая возвращает строку Json. моя проблема заключается в том, что у меня есть трудности, чтобы прочитать эточитать несколько данных Json от webservice

я попытался с:

JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); 
      string jsonData = reader.ReadToEnd(); 
      var myobj = jsSerializer.Deserialize<List<CinfoRichiesta>>(jsonData); 

, но как я могу получить значения из «студентов» и «мест»? с javascript я использовал: "var j = jQuery.parseJSON (msg.d);" но я думаю, что с C# код будет отличаться

это пример строки:

{"Questions":{ 
    "id":"2", 
    "BOOK":"3", 
     "students":{ 
     "class":"3", 
     "theme","43" 
     }, 
     "locations":{ 
     "h":"0", 
     "L":"3" 
     } 
} 
} 

ответ

0

Вы десериализация к коллекции типа CinfoRichiesta, который должен удерживать значение свойства для students и locations.

Предполагая, что ваш JSON правильно и ваше определение класса подходит для ответа (я рекомендую двойную проверку его, вставив всей строки ответа в json2csharp.com)

Как только это все подтверждено, вы должны быть в состоянии чтобы увидеть students и locations коллекции внутренне так:

foreach(Question q in myobj) 
{ 
    Console.WriteLine(q.students.class) 
} 

, который должен дать вам результат 3.

редактировать

Я думаю, что ваш главный вопрос, почему вы не можете получить доступ к свойствам students и locations. Убедитесь, что Students является его собственный класс как таковой:

public class Students 
{ 
    public int class { get; set; } 
    public int theme { get; set; } 
} 

и ваш locations класс должен быть:

public class Locations 
{ 
    public int h { get; set; } 
    public int l { get; set; } 
} 

Затем вы должны иметь questions класс, который instaniates как students и locations, как таковой:

public class Questions 
{ 
    public int id { get; set; } 
    public int book { get; set; } 
    public Student students { get; set; } 
    public Locations locations { get; set; } 
} 

При работе с десериализацией JSON важно, чтобы ваше свойство объекта n ames (т.е. class) соответствуют строке ответа в терминах случая. Итак, если вы написали его как public int Theme, он не будет напрямую отображаться.

Немного раздражает с точки зрения стандартов кодирования, но эй хо :-)

0

Во-первых, ваш JSON не является действительным, так то будет первой проблемы у вас есть. Вы можете проверить это на http://jsonlint.com/, например.

я себе установил это следующим образом:

{ 
    "Questions": { 
     "id": "2", 
     "BOOK": "3", 
     "students": { 
      "class": "3", 
      "theme": "na", 
      "43": "na" 
     }, 
     "locations": { 
      "h": "0", 
      "L": "3" 
     } 
    } 
} 

Второй ваш класс должен быть правильным, с текущей JSON это должно выглядеть примерно так

public class Rootobject 
    { 
     public Questions Questions { get; set; } 
    } 

    public class Questions 
    { 
     public string id { get; set; } 
     public string BOOK { get; set; } 
     public Students students { get; set; } 
     public Locations locations { get; set; } 
    } 

    public class Students 
    { 
     public string _class { get; set; } 
     public string theme { get; set; } 
     public string _43 { get; set; } 
    } 

    public class Locations 
    { 
     public string h { get; set; } 
     public string L { get; set; } 
    } 

После этого вы можете десериализации он вот так

var myobj = jsSerializer.Deserialize<List<Rootobject>>(jsonData); 

И затем вы можете получить информацию n нравится

myobj.Questions.students._class 
+0

Отлично, это очень приятно –