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

无法将JSON数据正确解析为AccountType枚举类型的技术问题

解决JSON到C#枚举类型解析失败的问题

以下是几种可行的解决方法:

1. 确认枚举定义与JSON值匹配

首先检查AccountType枚举是否包含与JSON中"Agency"完全匹配的成员(默认情况下枚举解析是大小写敏感的):

public enum AccountType
{
    // 必须存在名称为Agency的枚举成员
    Agency,
    Individual,
    // 其他枚举成员
}

2. 配置序列化器忽略大小写

如果JSON值和枚举成员大小写不一致(比如JSON传"agency"而枚举是Agency),可以通过序列化器配置忽略大小写:

针对System.Text.Json(.NET Core/.NET 5+默认)

在项目的服务配置中添加如下设置:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 忽略属性名大小写(比如JSON的accountType匹配C#的AccountType)
        options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
        // 忽略枚举值的大小写
        options.JsonSerializerOptions.EnumCaseSensitive = false;
    });

针对Newtonsoft.Json(Json.NET)

如果项目使用Newtonsoft.Json,配置如下:

builder.Services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.Converters.Add(
            new StringEnumConverter { AllowIntegerValues = false, CamelCaseText = false }
        );
    });

3. 显式指定枚举的JSON映射值

如果枚举成员名称和JSON中的值不一致(比如枚举成员是Agent但JSON传"Agency"),可以使用EnumMember属性指定映射关系:

using System.Runtime.Serialization;

public enum AccountType
{
    [EnumMember(Value = "Agency")]
    Agent,
    // 其他枚举成员
}

同时需要确保序列化器启用对EnumMember的支持:

  • System.Text.Json需添加JsonStringEnumConverter:
    options.JsonSerializerOptions.Converters.Add(
        new JsonStringEnumConverter(JsonNamingPolicy.CamelCase, allowIntegerValues: false)
    );
    
  • Newtonsoft.Json的StringEnumConverter默认支持EnumMember属性。

4. 修正Guid格式问题

注意JSON中的"id": "id"是无效的Guid格式,会导致整个模型解析失败。需要传入符合Guid规范的字符串,例如:

{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "name": "name",
  "accountType": "Agency"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:45:16