2016-09-15 59 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])正确地反序列化。

如果你看到一个空引用,那说明你的地方吞咽异常,这是值得单独固定。