JavaScriptEncoder
JavaScriptEncoder.Default экранирует
< как "\u003C".
Serialize
с кодировщиком по умолчанию содержит "\u003C".
UnsafeRelaxedJsonEscaping
оставляет < и не пишет "\u003C".
Задаётся через Encoder
в
JsonSerializerOptions.
Синтаксис
options.Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping;
Пример
Давайте сериализовать с кодировщиком по умолчанию:
using System;
using System.Text.Json;
class Program
{
static void Main()
{
string res = JsonSerializer.Serialize("<");
bool hasEscape = res.Contains("\\u003C");
Console.WriteLine(hasEscape);
}
}
Результат выполнения кода:
True
Пример
Давайте сериализовать с ослабленным экранированием:
using System;
using System.Text.Json;
using System.Text.Encodings.Web;
class Program
{
static void Main()
{
var options = new JsonSerializerOptions
{
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
};
string res = JsonSerializer.Serialize("<", options);
bool hasAngle = res.Contains("<");
Console.WriteLine(hasAngle);
}
}
Результат выполнения кода:
True
Пример
Давайте проверить отсутствие "\u003C":
using System;
using System.Text.Json;
using System.Text.Encodings.Web;
class Program
{
static void Main()
{
var options = new JsonSerializerOptions
{
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
};
string res = JsonSerializer.Serialize("<", options);
bool hasEscape = res.Contains("\\u003C");
Console.WriteLine(hasEscape);
}
}
Результат выполнения кода:
False
Смотрите также
-
JsonSerializerOptions,
свойство Encoder -
Serialize,
запись строки -
SerializeToUtf8Bytes,
запись в байты -
JsonSerializer,
класс сериализатора