后端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
如何將字符串映射到枚舉類型