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

前端带空格的JS枚举字符串转C#枚举的问题咨询

解决方案

方案一:前端请求前处理空格

在发送请求前,将ContactType字段值里的空格移除后再发送。可以选择单独处理请求数据,或者通过拦截器全局处理:

// 单独组装请求数据时处理
const requestPayload = {
  contactType: ContactType.Feedlot.replace(/\s+/g, ''), // 移除所有空格
  // 其他请求字段...
};

// 或用Axios拦截器全局处理
axios.interceptors.request.use(config => {
  if (config.data?.contactType && typeof config.data.contactType === 'string') {
    config.data.contactType = config.data.contactType.replace(/\s+/g, '');
  }
  return config;
});

方案二:后端接收时处理空格

如果不想改动前端代码,有两种后端处理方式:

方式1:自定义枚举转换器

继承StringEnumConverter,重写读取逻辑,先移除输入字符串的空格再转换:

public class SpaceIgnoringStringEnumConverter : StringEnumConverter
{
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.TokenType == JsonToken.String)
        {
            // 移除字符串中的所有空格
            string processedValue = reader.Value.ToString().Replace(" ", string.Empty);
            // 调用基类方法完成枚举转换
            return base.ReadJson(new JTokenReader(JToken.Parse($"\"{processedValue}\"")), objectType, existingValue, serializer);
        }
        return base.ReadJson(reader, objectType, existingValue, serializer);
    }
}

然后替换原有转换器配置:

builder.Services
    .AddControllers()
    .AddNewtonsoftJson(options =>
    {
        // 移除默认的StringEnumConverter
        options.SerializerSettings.Converters.RemoveAll(c => c is StringEnumConverter);
        // 添加自定义转换器
        options.SerializerSettings.Converters.Add(new SpaceIgnoringStringEnumConverter());
    });

方式2:给枚举加别名特性

直接给C#枚举的Feedlot字段添加EnumMember特性,指定匹配的字符串值:

public enum ContactType 
{
   Vendor,
   Buyer,
   [EnumMember(Value = "Feed Lot")]
   Feedlot,
   ...
}

这样原有的StringEnumConverter就能直接识别"Feed Lot"并转换为Feedlot枚举值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:52:16