2016-09-15 63 views
1

我有這個簡單的JSONJSON是有效的,但會導致代碼返回null

{ 
    "persons": [{ 
     "firstname": "Brad", 
     "lastname": "Pitt" 
    }, { 
     "firstname": "George", 
     "lastname": "Clooney" 
    }, { 
     "firstname": "Matt", 
     "lastname": "Damon" 
    }] 
} 

這是我的課在C#:

public class PersonObject 
{ 
    [JsonProperty(PropertyName = "persons")] 
    public List<Person> Persons { get; set; } 
} 

public class Person 
{ 
    [JsonProperty(PropertyName = "firstname")] 
    public string Firstname { get; set; } 

    [JsonProperty(PropertyName = "lastname")] 
    public string Lastname { get; set; } 
} 

出於某種原因,它總是返回null ...我真的不能看到這有什麼問題...與JsonConvert.DeserializeObject沒有錯,因爲它適用於其他JSON字符串。

_PersonsList = JsonConvert.DeserializeObject<List<PersonObject>>(data); 
+3

這樣的問題的一個提示:做相反的事情。填充一個對象並*序列化*它。你會看到差異在哪裏。 –

+0

由於PersonObject已經是Person的列表,請嘗試'_PersonsList = JsonConvert.DeserializeObject (data);'並且看看你得到了什麼。 –

回答

7

您的數據不包含List<PersonObject> - 它包含一個PersonObject又包含一個List<Person>。所以這工作得很好:

var json = File.ReadAllText("test.json"); 
var obj = JsonConvert.DeserializeObject<PersonObject>(json); 
Console.WriteLine(obj.Persons[0].Firstname); // Prints Brad 

以您目前的代碼,你不應該得到一個空引用回來 - 你應該得到一個例外,像這樣:

未處理的異常:Newtonsoft.Json .JsonSerializationException:因爲類型需要JSON數組(例如[1,2]),所以無法將當前JSON對象(例如{「name」:「value」})反序列化爲類型'System.Collections.Generic.List`1 [PersonObject] ,3])正確地反序列化。

如果你看到一個空引用,那說明你的地方吞嚥異常,這是值得單獨固定。