You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移至.NET 6后反序列化JSON非可空字段必填问题求解

解决.NET 6迁移后非可空字段必填验证问题

方案1:将非必填字段改为可空引用类型

.NET 6默认启用了可空引用类型(Nullable Reference Types),未标记为string?的string属性会被自动视为必填项。只需把不需要强制传入的字段改为可空类型即可:

public class Person
{
    public string? FirstName { get; set; }
    public string? LastName { get; set; }
    public string? CustomerType { get; set; }
}

这种方式能明确字段的可空性,是.NET 6推荐的最佳实践。

方案2:全局关闭可空引用类型检查

如果不想修改现有实体类,可以在项目的.csproj文件中添加配置,关闭全局可空检查:

<PropertyGroup>
  <!-- 其他配置 -->
  <Nullable>disable</Nullable>
</PropertyGroup>

这样会回到.NET Standard时代的行为,引用类型默认视为可空,不会触发必填验证。

方案3:禁用自动添加的必填验证规则

如果需要保留可空引用类型的其他特性,仅想取消自动生成的必填验证,可以在配置控制器时添加如下设置:

builder.Services.AddControllers()
    .AddNewtonsoftJson(options => 
    { 
        options.UseMemberCasing();
    })
    .AddMvcOptions(options =>
    {
        // 禁止为非可空引用类型自动添加[Required]特性
        options.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = true;
    });

builder.Services.AddControllersWithViews()
    .AddNewtonsoftJson(options =>
    {
        options.UseMemberCasing();
    })
    .AddMvcOptions(options =>
    {
        options.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = true;
    });

方案4:为单个字段标记允许空值

如果仅个别字段不需要必填验证,可以在属性上添加[AllowNull]特性:

public class Person
{
    [AllowNull]
    public string FirstName { get; set; }
    [AllowNull]
    public string LastName { get; set; }
    [AllowNull]
    public string CustomerType { get; set; }
}

这样模型验证会忽略该字段的必填要求。


内容的提问来源于stack exchange,提问作者Shane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 03:01:02