Gre*_*reg 9 c# .net-core c#-8.0 nullable-reference-types .net-core-3.0
我正在使用一个返回 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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我收到以下编译器错误:
可能返回空引用。
我可以将返回类型设置为 aT?但随后我会收到错误:
返回类型中引用类型的可为空性与重写的成员不匹配。
我该如何解决这个问题?
您已声明泛型类型是 (不可为空)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)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
或者
public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType == JsonTokenType.False)
{
return null!;
}
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13665 次 |
| 最近记录: |