2016-11-04 10 views
0

моего JSON выглядит следующим образом:C# получить ребенок из JSON

{ 
    "kind": "youtube#videoListResponse", 
    "etag": "\"sZ5p5Mo8dPpfIzLYQBF8QIQJym0/TOPzMxlQJUtRJBXHeKYMXsdEkHs\"", 
    "pageInfo": 
    { 
    "totalResults": 1, 
    "resultsPerPage": 1 
    }, 
    "items": 
    [ 
     { 
     "kind": "youtube#video", 
     "etag": "\"sZ5p5Mo8dPpfIzLYQBF8QIQJym0/BIVqr1Mkbule8othzWvZRor92wU\"", 
     "id": "QMNkWwq6L4Q", 
     "contentDetails": 
     { 
      "duration": "PT4M45S", 
      "dimension": "2d", 
      "definition": "hd", 
      "caption": "false", 
      "licensedContent": true, 
      "projection": "rectangular" 
     } 
     } 
    ] 
} 

форматирование может быть немного прочь, извините. Я попытался создать класс как это:

public class VideoDetails 
{ 
    public string kind; 
    public string etag; 
    public string id; 
    public string duration; 
    public string definition; 
    public string caption; 
    public string licensedContent; 
    public string projection; 
} 

После этого я десериализации файл в формате JSON:

VideoDetailRead = JsonConvert.DeserializeObject<VideoDetails>(json); 

, но я получаю только "ETag" и "вид". Ничего больше. Мой вопрос: как читать данные, перечисленные в разделе «элементы»? Это мой первый опыт работы с JSON, и поэтому я мало что знаю. Спасибо за некоторые ответы.

+0

Вы можете вставить json здесь http://json2csharp.com/ и сгенерировать классы C# – tym32167

ответ

3

Создайте второй объект для моделирования данных для детей. При условии, что свойство items имеет также ребенка под contentDetails, вам также понадобится еще один объект для десериализации этих свойств.

public class VideoDetailsItem 
{ 
    public string kind; 
    public string etag; 
    public string id; 
    public VideoContentDetails contentDetails; 
} 

public class VideoContentDetails 
{ 
    public string duration; 
    public string definition; 
    public string caption; 
    public bool licensedContent; 
    public string projection; 
} 

А родительский объект добавить List<VideoDetailsItem>.

public class VideoDetails 
{ 
    public string kind; 
    public string etag; 
    public List<VideoDetailsItem> items; 
} 

При десериализации JSON объекты, которые вы должны мимической структура объекта JSON в вашем объекте. Кроме того, рассмотрите возможность использования свойств вместо общедоступных полей для поддержки инкапсуляции в ваших объектах данных.

+0

Ваше решение сработало. Спасибо. Я буду помнить ваши намеки. – Guchen

0

Свойства вы перечислили в массив с именем items, так что ваша иерархия объектов должен соответствовать следующим образом:

public class VideoList 
{ 
    public string kind; 
    public string etag; 
    // etc... 
    public List<VideoDetails> items; 
} 

public class VideoDetails 
{ 
    public string kind; 
    public string etag; 
    public string id; 
    public string duration; 
    public string definition; 
    public string caption; 
    public string licensedContent; 
    public string projection; 
} 

Тогда:

var videos = JsonConvert.DeserializeObject<VideoList>(json); 
0

Это потому, что вы не правильно моделирования структура объекта. Прямо сейчас, ваш JSON структурированы как:

{baseInformation, VideoDetailsArray} 

Таким образом, вы должны перестроить свой объект данных как

public class VideoDetails 
{ 
    //Base information 
    public string kind {get; set;} 
    public string etag {get; set;} 
    //... 
    public List<VideoDetails> {get; set;} 
} 
0

Вы должны определить свой класс, чтобы соответствовать структуре JSON: в этом случае, вы должны определить items как список отдельного класса, который имеет свойства под ним, такие как duration и т. д. У вас должен быть класс VideoDetails, вложенный в другой класс, который может обернуть оба объекта в JSON и добавить другой класс для объекта contentDetails.

Одна вещь, которую вы можете сделать, это скопировать JSON в ваш буфер обмена, открыть новый файл класса в Visual Studio и перейти к Edit>Paste Special>Paste JSON as Classes. Это создаст правильную структуру для вас, и вы увидите, как вложенные классы в JSON правильно переводится на классы C#.

Смежные вопросы