Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当反序列化对象为空时,如何让Json.net返回新的T值?_C#_.net_Json.net - Fatal编程技术网

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

C# 当反序列化对象为空时,如何让Json.net返回新的T值?,c#,.net,json.net,C#,.net,Json.net,当我使用Json.net时,我总是遇到这样的问题: List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(personsJson); List persons=JsonConvert.DeserializeObject(personsJson); 你们知道:有时由于服务器错误或任何其他问题,返回的json字符串只是一个空值 但是当personsJson是null值时。Json

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

 List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(personsJson);
List persons=JsonConvert.DeserializeObject(personsJson);
你们知道:有时由于服务器错误或任何其他问题,返回的json字符串只是一个空值

但是当personsJsonnull值时。Json.net将抛出:System.ArgumentNullException

我只需要它自动给我一个新的源对象,我的意思是当personsJson为null时,请给我返回:新的Person列表();这将更有帮助,我不需要在逐个描述之前确定每个json字符串

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

那么为什么不检查null呢

List persons=personsJson!=无效的
? JsonConvert.DeserializeObject(personsJson)
:新列表();
如果有太多这样的代码,可以将其概括为:

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>>();
publicstatict反序列化(这个字符串是json),其中T:new()
{
返回json!=null
?JsonConvert.DeserializeObject(json)
:新T();
}
List persons=personsJson.Deserialize();
那么为什么不直接检查空值呢

List persons=personsJson!=无效的
? JsonConvert.DeserializeObject(personsJson)
:新列表();
如果有太多这样的代码,可以将其概括为:

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>>();
publicstatict反序列化(这个字符串是json),其中T:new()
{
返回json!=null
?JsonConvert.DeserializeObject(json)
:新T();
}
List persons=personsJson.Deserialize();

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

public List<Person> DeserializePersons(string personsJson)
{
    if (string.IsNullOrEmpty(personsJson))
    {
        return new List<Person>();
    }
    else
    {
        return JsonConvert.DeserializeObject<List<Person>>(personsJson);
    }
}
公共列表反序列化人员(字符串personsJson)
{
if(string.IsNullOrEmpty(personsJson))
{
返回新列表();
}
其他的
{
返回JsonConvert.DeserializeObject(personsJson);
}
}

但是,您可能希望处理与“检索人员时出错”不同的“未找到人员”情况。

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

public List<Person> DeserializePersons(string personsJson)
{
    if (string.IsNullOrEmpty(personsJson))
    {
        return new List<Person>();
    }
    else
    {
        return JsonConvert.DeserializeObject<List<Person>>(personsJson);
    }
}
公共列表反序列化人员(字符串personsJson)
{
if(string.IsNullOrEmpty(personsJson))
{
返回新列表();
}
其他的
{
返回JsonConvert.DeserializeObject(personsJson);
}
}

但是,您可能希望处理“找不到人员”的情况,而不是“检索人员时出错”。

使用扩展方法是一个好主意。这是一个安全的描述。谢谢。使用扩展方法是个好主意。这是一个安全的描述。非常感谢。