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

如何避免C# System.Text.Json反序列化西里尔字符时转义?

解决JSON反序列化中西里尔字符显示转义的问题

问题本质

你看到的\uXXXX转义字符串只是调试器的格式化显示方式,反序列化后的JsonObject中存储的实际字符串值和源JSON完全一致,西里尔字符在内存中是正常的Unicode编码。可以通过直接访问字符串属性验证:

string errorMessage = jsonResult1["ERRORS"]["bdate"][0].GetString();
// errorMessage的值就是:Поле "Дата рождения" должно содержать корректную дату в формате ДД.ММ.ГГГГ

若需序列化输出时保留原始西里尔字符

如果需要将JsonObject重新序列化为JSON字符串时避免转义西里尔字符,需调整JsonSerializerOptions的编码器配置:

var serializeOptions = new JsonSerializerOptions
{
    // 使用宽松编码器,直接输出Unicode字符而非转义
    Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
    WriteIndented = true // 可选,格式化输出便于阅读
};

// 重新序列化为JSON字符串
string formattedJson = JsonSerializer.Serialize(jsonResult1, serializeOptions);
// 输出结果会保留原始西里尔字符:
// {"ERROR":"-","ERRORS":{"bdate":["Поле \"Дата рождения\" должно содержать корректную дату в формате ДД.ММ.ГГГГ"]},"STATUS":400}

补充说明

你之前配置的JavaScriptEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.Cyrillic)仅允许这些字符集,但默认JSON序列化仍会对非ASCII字符进行转义。UnsafeRelaxedJsonEscaping会跳过对Unicode字符的转义,直接输出原始字符。

内容的提问来源于stack exchange,提问作者Виктор Кравченко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:01:49