小编Tec*_*oid的帖子

System.Text.Json 序列化 Unicode 字符(如表情符号)的问题

我正在将应用程序从 .NET Core 2.2 升级到 .NET Core 3.0,并且新的System.Text.Json序列化程序的行为与 Newtonsoft 在 2.2 中的行为不同。在像不间断空格 (\u00A0) 或表情符号字符这样的字符上,Newtonsoft(甚至 Utf8Json)将它们序列化为它们的实际字符,而不是 Unicode 代码。

我创建了一个简单的 .NET Fiddle 来展示这一点。

var input = new Foo { Bar = "\u00A0 Test !@#$%^&*() \uD83D\uDCAF ??" };
var newtonsoft = Newtonsoft.Json.JsonConvert.SerializeObject(input);
var system = System.Text.Json.JsonSerializer.Serialize(input, new System.Text.Json.JsonSerializerOptions
    {
        Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping, 
    });
var utf8Json = Utf8Json.JsonSerializer.ToJsonString(input);

Console.WriteLine($"Original: {input.Bar} - {input.Bar.Contains('\u00A0')}"); // Original
Console.WriteLine($"Newtonsoft: {newtonsoft} - {newtonsoft.Contains('\u00A0')}"); // Works
Console.WriteLine($"System.Text.Json: {system} - {system.Contains('\u00A0')}"); // Does not work
Console.WriteLine($"Utf8Json: {utf8Json} - {utf8Json.Contains('\u00A0')}"); …
Run Code Online (Sandbox Code Playgroud)

c# asp.net json json.net system.text.json

2
推荐指数
1
解决办法
2234
查看次数

标签 统计

asp.net ×1

c# ×1

json ×1

json.net ×1

system.text.json ×1