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

.NET7 Web API中EF7 JSON列中文避免转Unicode的配置方法

解决EF Core 7 JSON列中非ASCII字符被Unicode编码的问题

问题原因

EF Core 默认使用 System.Text.Json 序列化JSON列内容时,会将中文、日文等非ASCII字符转义为\uXXXX格式的Unicode编码,导致SQL Server中存储的不是原始字符。

解决方案

通过配置JSON列的序列化选项,指定不转义非ASCII字符的编码器即可解决。

修改DbContext配置

在OnModelCreating方法中,为ToJson指定自定义的JsonSerializerOptions,设置Encoder为JavaScriptEncoder.UnsafeRelaxedJsonEscaping:

public class ApplicationDBContext : DbContext
{
    public ApplicationDBContext(DbContextOptions<ApplicationDBContext> options) : base(options) { }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        builder.Entity<Card>()
            .OwnsMany(card => card.Translations, b =>
            {
                b.ToJson(options =>
                {
                    // 禁用非ASCII字符的Unicode转义
                    options.JsonSerializerOptions.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping;
                });
            });
    }

    public virtual DbSet<Card> Cards { get; set; }
}

注意事项

  • UnsafeRelaxedJsonEscaping会允许输出未转义的HTML字符,若你的应用处理不可信的用户输入,需谨慎使用,避免XSS风险。如果只是存储可控的多语言翻译内容,这个配置是安全的。
  • 顺便修正你代码中的两处小问题:
    • ApplicationDBContext构造函数的括号未闭合(已在上面代码中修正)
    • CardTranslation类中的laungaugeId拼写错误,建议改为LanguageId(符合C#命名规范)

验证效果

配置完成后,再次插入包含中文的Card数据,SQL Server中的JSON列会直接存储"name": "你好"而非"name": "\u4F60\u597D",查询时也会返回原始字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:45:32