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

C# JSON反序列化异常排查及枚举序列化、数据提取解决方案

问题解决方案

1. 修复反序列化类型不匹配错误

你生成的JSON是List<Alts>类型的数组,但反序列化时错误尝试转换成List<AltsInfos>,导致类型不匹配抛出异常。正确做法是先反序列化为List<Alts>,再遍历其中的account集合提取目标数据。

修改后的反序列化代码:

using (StreamReader sr = new StreamReader(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "BoostyLauncher", "alts.json")))
{
    string json = sr.ReadToEnd();
    // 反序列化为正确的类型:List<Alts>
    List<Alts> altsList = JsonConvert.DeserializeObject<List<Alts>>(json);
    
    // 提取每个account下的alts_name
    foreach (var alts in altsList)
    {
        foreach (var info in alts.account)
        {
            Console.WriteLine(info.alts_name);
        }
    }
}

2. 解决枚举序列化为字符串的问题

要让枚举序列化为EnumMember指定的字符串而非数字,需要在序列化/反序列化时添加StringEnumConverter转换器,并配置JsonSerializerSettings。

修改后的序列化代码:

var json = new List<Alts>();
List<AltsInfos> p1 = new List<AltsInfos> { new AltsInfos { alts_name = "JeSaisPas", alts_email = "truc2fou@g.com", alts_pass = "azerty", alts_type = AltsInfos.AltType.Microsoft } };
json.Add(new Alts { account = p1 });
List<AltsInfos> p2 = new List<AltsInfos> { new AltsInfos { alts_name = "TrucBidule", alts_email = "trucmachun@g.com", alts_pass = "azerty2.0", alts_type = AltsInfos.AltType.Microsoft } };
json.Add(new Alts { account = p2 });

// 添加StringEnumConverter,让枚举序列化为字符串
var settings = new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Ignore,
    Formatting = Formatting.Indented,
    Converters = new List<JsonConverter> { new StringEnumConverter() }
};

string jsonString = JsonConvert.SerializeObject(json, settings);
string savePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "BoostyLauncher", "alts.json");
// 确保目录存在,避免写入失败
Directory.CreateDirectory(Path.GetDirectoryName(savePath));
File.WriteAllText(savePath, jsonString);

修改后生成的JSON中,alts_type会显示为指定字符串:

[
  {
    "account": [
      {
        "alts_name": "JeSaisPas",
        "alts_email": "truc2fou@g.com",
        "alts_pass": "azerty",
        "alts_type": "Microsoft"
      }
    ]
  },
  {
    "account": [
      {
        "alts_name": "TrucBidule",
        "alts_email": "trucmachun@g.com",
        "alts_pass": "azerty2.0",
        "alts_type": "Microsoft"
      }
    ]
  }
]

额外优化提示

  • 使用Path.Combine拼接路径,避免手动拼接字符串出现的路径分隔符问题
  • 写入文件前先创建目标目录,防止因目录不存在抛出异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:48:27