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

Newtonsoft.Json反序列化枚举字符串至枚举类型失败的问题求助

Newtonsoft.Json反序列化枚举字符串至枚举类型失败的问题求助

嗨,我看了你的问题,大概率是两个小细节没处理好导致的,咱们一步步来解决:

  • 缺少System.Runtime.Serialization命名空间引用
    你用到了[EnumMember]特性来给枚举值指定字符串映射,但这个特性属于System.Runtime.Serialization命名空间,如果没在代码里引用它,Newtonsoft.Json根本识别不了你设置的"0"/"1"/"2"这些映射值,自然没法把JSON里的字符串转换成对应的枚举类型。

    解决方法很简单,在JsonError类的代码顶部加上这行引用:

    using System.Runtime.Serialization;
    
  • JsonConverter特性的位置不对
    你现在把[JsonConverter(typeof(StringEnumConverter))]加在了嵌套的Number枚举类型上,对于嵌套类里的枚举,Newtonsoft.Json的特性识别偶尔会出问题。更稳妥的做法是把这个特性直接贴在ErrorNumber属性上,明确告诉转换器要处理这个属性:

    修改后的JsonError类代码如下:

    using Newtonsoft.Json;
    using Newtonsoft.Json.Converters;
    using System.Runtime.Serialization; // 必须加的命名空间
    
    public class JsonError
    {
        public enum Number
        {
            [EnumMember(Value = "0")]
            Pass,
            [EnumMember(Value = "1")]
            Miscalc,
            [EnumMember(Value = "2")]
            ReadError
        }
    
        [JsonConverter(typeof(StringEnumConverter))] // 移到属性上
        public Number ErrorNumber { get; set; }
    }
    

另外还有个可选方案:如果你不想给每个属性加特性,也可以在反序列化时全局配置转换器,这样所有枚举类型都会用字符串枚举转换器处理:

var jsonSettings = new JsonSerializerSettings();
jsonSettings.Converters.Add(new StringEnumConverter());
var testBehavior = JsonConvert.DeserializeObject<TestBehavior>(yourJsonString, jsonSettings);

你先试试前两个修改,应该就能解决这个反序列化错误啦!

备注:内容来源于stack exchange,提问作者Thern

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:59:34