C# 将空字符串反序列化为列表<;字符串>;
我实现了一个根据json字符串返回C# 将空字符串反序列化为列表<;字符串>;,c#,json,json.net,C#,Json,Json.net,我实现了一个根据json字符串返回列表的方法 在我意识到我正在尝试反序列化一个空字符串之前,它工作得很好。它不会崩溃,也不会引发异常。它返回一个null值,而不是一个空的列表 问题是,为了返回一个空的列表而不是null值,我可以触摸什么 return JsonConvert.DeserializeObject(content, typeof(List<string>)); 您可以使用运算符(??)执行此操作: 谢谢难道没有什么捷径可以代表开箱即用吗?谢谢西蒙!让我请你以一种通用的形
列表的方法
在我意识到我正在尝试反序列化一个空字符串之前,它工作得很好。它不会崩溃,也不会引发异常。它返回一个null
值,而不是一个空的列表
问题是,为了返回一个空的列表
而不是null
值,我可以触摸什么
return JsonConvert.DeserializeObject(content, typeof(List<string>));
您可以使用运算符(??
)执行此操作:
谢谢难道没有什么捷径可以代表开箱即用吗?谢谢西蒙!让我请你以一种通用的形式来解决这个问题(我已经编辑了我的帖子)。如您所知,我使用一种方法来反序列化接收到的json字符串。所以具体的typeof(List)
是哪种类型的C#让我说JsonConvert.DeserializeObject(内容、类型)
type.GetType()
错误;它将给出从System.type
继承的一些具体类型,这不是您想要的。您需要if(type==typeof(Object))
。在下一个if
中,您也可以使用==
(为了一致性)。
public object Deserialize(string content, Type type) {
if (type.GetType() == typeof(Object))
return (Object)content;
if (type.Equals(typeof(String)))
return content;
try
{
return JsonConvert.DeserializeObject(content, type);
}
catch (IOException e) {
throw new ApiException(HttpStatusCode.InternalServerError, e.Message);
}
}
return JsonConvert.DeserializeObject(content, typeof(List<string>)) ?? new List<string>();
public T Deserialize<T>(string content)
{
var settings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
};
try
{
return JsonConvert.DeserializeObject<T>(content, settings);
}
catch (IOException e)
{
throw new ApiException(HttpStatusCode.InternalServerError, e.Message);
}
}