c# - 返回类型中引用类型的可空性与覆盖的成员不匹配

标签 c# .net-core .net-core-3.0 c#-8.0 nullable-reference-types

我正在使用一个返回 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/

相关文章:

c# - 将中间件附加到 ASP.NET Core Web API 中的特定路由?

asp.net-core - 在 ubuntu 和 .net core 3.0 上缺少 "System"引用

c# - 如何从 .Net DLL 获取公共(public)导出列表?

c# - 如何将表列(通过 SQL 查询返回)列为 CheckedListBox 中的项目?

c# - OnValidateIdentity ASP.NET Identity 如何工作

ElasticSearch NEST 执行原始查询 DSL

javascript - 在 Xamarin.Forms IOS WebViewRenderer 中调用 JavaScript 函数

html - asp.net core波浪号斜杠(~/)不解析图像路径

c# - 如何替换 .NET Core 3.0 中的 AddJwtBearer 扩展