后端json数据反序列化枚举类型不匹配的错误
后端json数据反序列化枚举类型不匹配的错误
后端返回的json格式在前端反序列化报错System.Text.Json.JsonException:“The JSON value could not be converted to TodoReminderApp.Models.Priorityen. Path: $.Data.Items.$values[0].Priority | LineNumber: 0 | BytePositionInLine: 304.”
System.Text.Json 在反序列化枚举时出现了类型不匹配的错误。这通常是因为 JSON 中的枚举值表示方式(字符串或数字)与 C# 枚举的预期格式不匹配。
要解决这个问题,你需要在反序列化时配置 JsonSerializerOptions 来正确处理枚举类型
解决方法
Converters = { new JsonStringEnumConverter() } // 👈 添加这一行
这里添加了JsonStringEnumConverter
转换器,它会:
将 JSON 中的字符串值(如 "Low"、"Medium"、"High")转换为对应的枚举值
保持属性名称的不区分大小写设置
确保你的项目引用了System.Text.Json
命名空间,这个转换器就在这个命名空间下。
如果服务器返回的是数字而不是字符串(例如 1、2、3),则不需要这个转换器,这时候可能是你的枚举定义与服务器返回的数值不匹配导致的问题
你遇到的问题是:
服务器返回的 JSON 中
Priority
字段是一个 字符串值(如"High"
),但你的客户端模型中
Priority
是一个 枚举类型(如Priorityen
),默认情况下
System.Text.Json
不会自动将字符串映射到枚举,除非使用JsonStringEnumConverter
。
✅ 解决方案:使用 JsonStringEnumConverter
你需要在反序列化时告诉 System.Text.Json
如何将字符串映射到枚举类型