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; });
验证步骤
- 在浏览器/Postman中直接调用API端点,查看返回的JSON结构,确认
Video Number或VideoNumber字段的存在及值是否正确。 - 检查
Entry类的其他partial定义,排除是否存在冲突的序列化配置。
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

