2015-01-21 100 views
0

我試圖從API中獲取的JSON字符串(迄今爲止用字符串變量測試)創建電影列表。我的電影級別:JSON to object using C#JavaScriptSerializer

private string title { get; set; } 
private int year { get; set; } 
private string releaseDate { get; set; } 

public override String ToString() 
{ 
    return title + " (" + year + "): " + releaseDate; 
} 

但是,下面的代碼不會在電影對象中插入任何內容。前一段時間,它創建了2個對象(這是正確的,因爲它是JSON字符串中的2個電影),但沒有任何內容。現在我一無所有,代碼不會創建任何對象。

string json = "{\"movies\": [{\"title\": \"Something\",\"year\": \"1999\",\"releaseDate\": \"1234\"},{\"title\": \"Something2\",\"year\": \"1992\",\"releaseDate\": \"1235\"}]}"; 

List<Movie> movieList = new JavaScriptSerializer().Deserialize<List<Movie>>(json); 

很明顯,我很新的這一點,但我似乎無法找到一個解決我的問題在別處「的原因要麼是不一樣的問題,因爲我有或者我找不到我的代碼和解決方案之間的差異。

我在這裏錯過了什麼? Movie-class中的變量名稱是否必須與JSON字符串中的相同?

編輯:我終於找到了我的第二個問題here。當你使用自動屬性時,寫出私人信息是錯誤的。另見{ get; set; } syntax

+0

你試過這樣嗎?字符串json =「[{\」title \「:\」Something \「,\」year \「:\」1999 \「,\」releaseDate \「:\」1234 \「},{\」title \「: 「Something2」,「year」:「1992」,「releaseDate」:\「1235 \」}]「; – 2015-01-21 00:16:43

+0

不完全如此,但我只用{}嘗試過一部電影。 – Phil 2015-01-21 00:21:24

+0

你爲什麼不能使用Newtonsoft使用JSON.NET的任何原因? – 2015-01-21 10:02:08

回答

2

你JSON是包含這是一個數組「電影」屬性的對象:

{ 
    movies: [ 
     { 
      "title": "Something" 
     }, 
     { 
      "title": "Something Else" 
     } 
    ] 
} 

反序列化它,你需要一個對象,像這樣一個「電影」屬性:

class MoviesObject { 
    public List<Movie> movies { get; set; } 
} 

List<Movie> movieList = new JavaScriptSerializer(). 
    Deserialize<MoviesObject>(json).movies; 
+0

所以我需要一個包含JSON等外部列表的對象?非常感謝,我現在又有2個空的對象。我的輸出: '(0): (0):' – Phil 2015-01-21 00:25:18

+0

您不應該爲您的JSON DTO使用字段。你永遠不應該有公共領域。改用屬性。 – Aron 2015-01-21 00:43:47