返回类型中引用类型的可为空性与重写的成员不匹配

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?但随后我会收到错误:

返回类型中引用类型的可为空性与重写的成员不匹配。

我该如何解决这个问题?

Jef*_*ado 3

您已声明泛型类型是 (不可为空)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)