我正在使用一个返回 JSON 的 API,其中一个值可以是 false
或一个对象。为了处理这个问题,我创建了一个自定义 JsonConverter<T>
.
internal class JsonFalseOrObjectConverter<T> : JsonConverter<T> where T : class
{
public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType == JsonTokenType.False)
{
return null;
}
else
{
return JsonSerializer.Deserialize<T>(ref reader);
}
}
}
问题是我收到以下编译器错误:
Possible null reference return.
我可以将返回类型设置为 T?
但是我会得到错误:
Nullability of reference types in return type doesn't match overridden member.
我该如何解决?
最佳答案
您已声明泛型类型是(不可为空的)T
然而你回来了null
.这显然是无效的。
你需要让你的转换器实现 JsonConverter<T?>
如果您不在乎,也可以使用 null 宽容运算符。
internal class JsonFalseOrObjectConverter<T> : JsonConverter<T?> where T : class
{
public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
...
}
public override void Write(Utf8JsonWriter writer, T? value, JsonSerializerOptions options)
{
...
}
}
或
public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType == JsonTokenType.False)
{
return null!;
}
...
}
关于c# - 返回类型中引用类型的可空性与覆盖的成员不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58672640/