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

ASP.NET Blazor数值字段显示为0但Swagger正常的问题排查

问题原因与解决方法

核心分析

Swagger能正确展示VideoNumber,说明API返回的JSON数据完全正确,问题出在Blazor客户端的反序列化环节:

  • 你的Entry类中VideoNumber属性的[Column("Video Number")]是EF Core用于映射数据库列名的特性,不会直接影响JSON序列化。但如果API端的JSON序列化配置被修改为使用数据库列名作为JSON键(而非默认的类属性名),返回的JSON中该字段的键会是"Video Number"(带空格)。
  • 客户端反序列化时,System.Text.Json默认按属性名VideoNumber匹配JSON键,即便开启了PropertyNameCaseInsensitive = true,也无法匹配带空格的"Video Number",因此VideoNumber属性未被赋值,保持short类型的默认值0。

解决方法

方法1:给客户端Entry类添加JSON映射特性

在VideoNumber属性上添加[JsonPropertyName("Video Number")],明确指定JSON键的名称:

using System.Text.Json.Serialization;

public partial class Entry
{
    [Key, Column("Video Number", Order = 0)]
    [JsonPropertyName("Video Number")] // 添加该行
    public short VideoNumber { get; set; }
    // 其余属性保持不变
}

方法2:调整API端序列化配置,使用属性名生成JSON键

如果希望API返回的JSON键使用类属性名(如VideoNumber)而非数据库列名,可在API项目的Program.cs中修改配置:

// 针对最小API的配置方式
builder.Services.ConfigureHttpJsonOptions(options =>
{
    // 禁用自动命名策略,使用原始属性名
    options.SerializerOptions.PropertyNamingPolicy = null;
    // 若需要驼峰命名,可改为:
    // options.SerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
});

验证步骤

  1. 在浏览器/Postman中直接调用API端点,查看返回的JSON结构,确认Video Number或VideoNumber字段的存在及值是否正确。
  2. 检查Entry类的其他partial定义,排除是否存在冲突的序列化配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:32:13