当反序列化对象为 null 时,如何让 Json.net 返回新的 T 值

本文关键字:返回 net Json 对象 反序列化 null | 更新日期: 2023-09-27 18:35:15

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

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

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

但是当 personsJson 是一个值时。 Json.net 将抛出:System.ArgumentNullException

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

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

当反序列化对象为 null 时,如何让 Json.net 返回新的 T 值

那么为什么不直接检查呢?

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>>();

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

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

但是,您可能希望处理与"检索人员时发生错误"不同的"未找到人员"情况。