如何避免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,提问作者Виктор Кравченко
相关产品推荐
相关产品推荐

