当Deserialize Object为null时,如何让Json.net返回一个新的T值?

时间:2014-12-24 09:43:18

标签: c# .net json.net

当我使用Json.net时,我总是会遇到这样的问题:

 List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(personsJson);

你们知道:有些时候因为服务器错误或任何其他问题,返回json字符串只是空值

但当 personsJson null 值时。 Json.net将抛出: System.ArgumentNullException

我只需要它自动给我一个新的源对象,我的意思是当这些人json null 时,jut gime me back: new List of Person();这将更有帮助,我不需要在逐一描述之前确定每个json字符串。

我认为可能有一些设置可以做到这一点,但没有找到。

2 个答案:

答案 0 :(得分:5)

那么为什么不检查 null

List<Person> persons = personsJson != null 
                        ? JsonConvert.DeserializeObject<List<Person>>(personsJson)
                        : new List<Person>();

如果你有太多像这样的代码,你可以概括它:

public static T Deserialize<T>(this string json) where T : new()
{
     return json != null 
                    ? JsonConvert.DeserializeObject<T>(json)
                    : new T();
}


List<Person> persons = personsJson.Deserialize<List<Person>>();

答案 1 :(得分:1)

您可以在尝试反序列化之前测试变量:

public List<Person> DeserializePersons(string personsJson)
{
    if (string.IsNullOrEmpty(personsJson))
    {
        return new List<Person>();
    }
    else
    {
        return JsonConvert.DeserializeObject<List<Person>>(personsJson);
    }
}

但是,您可能希望处理“无人发现”案例,与“检索人员时发生错误”不同。