System.Text.Json反序列化Null值



是否可以将以下函数写成一行?

using System.Text.Json;
private MyClass GetClaimAsMyClass()
{
// The claim might not exist!
Claim claim = User.Claims.SingleOrDefault(c => c.Type == "myclaimtype");
return claim == null ? null : JsonSerializer.Deserialize<MyClass>(claim.value);
}

换句话说,有没有一种方法可以执行JsonSerializer。反序列化传入的null字符串并返回null值(没有错误(?

例如,我想这样做:

return JsonSerializer.Deserialize<MyClass>(User.Claims.SingleOrDefault(c => c.type == "myclaimtype")?.Value)

或者还有别的办法?

也许JsonSerializeOptions中有一些我找不到的东西,但作为替代,我采取了以下方法:

在JsonSerializer周围创建一个"包装器",并将其放入System.Text.Json命名空间中(不能将扩展创建为静态类(:

namespace System.Text.Json
{
public static class JsonNullSerializer
{
public static T Deserialize<T>(string value)
=> string.IsNullOrEmpty(value)
? default
: JsonSerializer.Deserialize<T>(value);
}
}

用法:

using System.Text.Json;
private MyClass GetClaimAsMyClass()
=> JsonNullSerializer.Deserialize<MyClass>(
User.Claims.SingleOrDefault(c => c.Type == "myclaimtype")?.Value);

最新更新