2016-11-04 157 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#類。