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

ASP.NET Web API GET方法中如何移除泛型输出的特殊字符

在ASP.NET Web API中移除泛型响应的特殊字符

针对你的场景,有几种实用方法可以处理泛型输出中的特殊字符,无需直接操作字符串响应:


方法1:遍历集合,逐个清理实体属性

直接在返回前遍历IEnumerable<EMPLookup>集合,对每个实体的字符串属性用Regex.Replace处理:

[Route("api/LookUp/GetEmpresult/{EmpId}")]
[HttpGet]       
public IEnumerable<EMPLookup> GetEmpresult(string EmpId)
{
    EMPDataAccess empdb = new EMPDataAccess();
    var empList = empdb.GetEmp(EmpId);
    
    // 遍历每个员工实体,清理字符串属性的特殊字符
    foreach (var emp in empList)
    {
        // 示例:清理Name属性,保留字母、数字、空格、点、横杠,移除其他特殊字符
        if (!string.IsNullOrEmpty(emp.Name))
        {
            emp.Name = Regex.Replace(emp.Name, @"[^\w\s.-]", "");
        }
        // 同理处理其他字符串属性,比如Address、Email等
        if (!string.IsNullOrEmpty(emp.Address))
        {
            emp.Address = Regex.Replace(emp.Address, @"[^\w\s.-]", "");
        }
    }
    
    return empList;          
}

注:正则表达式@"[^\w\s.-]"可根据需求调整,比如要保留逗号、问号,就改成@"[^\w\s.,?\-]"。


方法2:给实体属性加自定义序列化转换器

如果希望全局自动处理该实体的序列化,不用每次在控制器写逻辑,可以给EMPLookup的字符串属性添加自定义Json转换器(以Newtonsoft.Json为例):

步骤1:创建自定义转换器

public class CleanSpecialCharsConverter : JsonConverter
{
    // 定义允许保留的字符规则
    private readonly Regex _cleanRegex = new Regex(@"[^\w\s.-]");

    public override bool CanConvert(Type objectType)
    {
        // 只处理字符串类型
        return objectType == typeof(string);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var value = reader.Value as string;
        return string.IsNullOrEmpty(value) ? value : _cleanRegex.Replace(value, "");
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        var strValue = value as string;
        var cleanedValue = string.IsNullOrEmpty(strValue) ? strValue : _cleanRegex.Replace(strValue, "");
        writer.WriteValue(cleanedValue);
    }
}

步骤2:给实体属性标记转换器

public class EMPLookup
{
    [JsonConverter(typeof(CleanSpecialCharsConverter))]
    public string Name { get; set; }

    [JsonConverter(typeof(CleanSpecialCharsConverter))]
    public string Address { get; set; }

    // 其他属性...
}

这样只要返回EMPLookup实体,序列化时会自动清理指定属性的特殊字符。


方法3:全局配置格式化器(所有字符串属性生效)

如果要让整个API的所有字符串响应都自动清理特殊字符,可在WebApi配置中全局添加转换器:

在WebApiConfig.cs的Register方法中:

public static void Register(HttpConfiguration config)
{
    // 其他路由、过滤器配置...
    
    // 获取Json格式化器,添加自定义转换器
    var jsonFormatter = config.Formatters.JsonFormatter;
    jsonFormatter.SerializerSettings.Converters.Add(new CleanSpecialCharsConverter());
}

此方法会对所有API返回的字符串属性生效,无需逐个实体配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:47:19