Я обновляю приложение с .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')}"); // Works
https://dotnetfiddle.net/erCaZl
Существует ли свойство Encoder или JsonSerializerOptions
для сериализации, как это сделал Newtonsoft?