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

ASP.NET Core 2.0 WebAPI接口JSON将&转义为&的实现方法

解决ASP.NET Core 2.0 WebAPI中JSON转义&为\u0026的问题

我刚好碰到过类似的需求,给你梳理下解决方案:

在ASP.NET Core 2.0里,WebAPI默认用Newtonsoft.Json(也就是Json.NET)做序列化。你现在看到&被转成&,是因为框架默认开启了HTML字符编码(对应StringEscapeHandling.EscapeHtml),而你要的是把&转成JSON的Unicode转义序列\u0026,这个没法直接通过单一配置项实现,但我们可以结合配置调整和自定义转换器来搞定。


第一步:关闭默认的HTML编码

首先得先关掉默认的HTML转义,不然就算加了自定义逻辑,还是会先把&转成&。在你现有的AddJsonOptions配置里,加上这一行:

options.SerializerSettings.StringEscapeHandling = StringEscapeHandling.Default;

这个设置会让Json.NET只转义JSON语法必需的字符(比如引号、反斜杠),不再处理HTML敏感字符。


第二步:添加自定义转换器处理&的Unicode转义

接下来我们需要一个自定义的Json转换器,专门把字符串里的&替换成\u0026。先写这个转换器类:

public class AmpersandEscapeConverter : JsonConverter<string>
{
    // 反序列化时把\u0026还原回&
    public override string ReadJson(JsonReader reader, Type objectType, string existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        return existingValue?.Replace("\\u0026", "&");
    }

    // 序列化时把&转成\u0026
    public override void WriteJson(JsonWriter writer, string value, JsonSerializer serializer)
    {
        if (value == null)
        {
            writer.WriteNull();
            return;
        }
        var escapedValue = value.Replace("&", "\\u0026");
        writer.WriteValue(escapedValue);
    }
}

然后把这个转换器加到你的Json配置里,完整的配置代码如下:

services.AddMvc()
    .AddXmlSerializerFormatters()
    .AddJsonOptions(options =>
    {
        // 关闭HTML编码
        options.SerializerSettings.StringEscapeHandling = StringEscapeHandling.Default;
        // 添加自定义转换器
        options.SerializerSettings.Converters.Add(new AmpersandEscapeConverter());
        // 保留你原来的NullValueHandling配置,比如:
        // options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
    });

如果你只需要处理特定字段

要是你不需要全局所有字符串都处理&,只想针对某个模型属性,那可以不用全局加转换器,直接在属性上标记特性就行:

public class YourApiResponse
{
    [JsonConverter(typeof(AmpersandEscapeConverter))]
    public string Status { get; set; }
    // 其他属性...
}

记得同样要关闭全局的HTML编码配置哦。


补充说明

默认的EscapeHtml设置是为了防止XSS攻击,所以会把<、>、&这些HTML敏感字符转成实体。但如果你的客户端要求必须用Unicode转义而不是HTML实体,那上面的方案就完全适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:49:36