JsonConverter
Наследник JsonConverter<int>
может писать число 1 как JSON-string
"abcde" и читать эту строку обратно в 1.
Подключают через
Converters
в
JsonSerializerOptions.
Синтаксис
class MyIntConverter : JsonConverter<int>
{
public override int Read(...) { ... }
public override void Write(...) { ... }
}
Пример
Давайте записать число как строку:
using System;
using System.Text.Json;
using System.Text.Json.Serialization;
class MyIntConverter : JsonConverter<int>
{
public override int Read(
ref Utf8JsonReader reader,
Type typeToConvert,
JsonSerializerOptions options)
{
return 1;
}
public override void Write(
Utf8JsonWriter writer,
int value,
JsonSerializerOptions options)
{
writer.WriteStringValue("abcde");
}
}
class Program
{
static void Main()
{
var options = new JsonSerializerOptions();
options.Converters.Add(new MyIntConverter());
string res = JsonSerializer.Serialize(1, options);
Console.WriteLine(res);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте прочитать строку в число:
using System;
using System.Text.Json;
using System.Text.Json.Serialization;
class MyIntConverter : JsonConverter<int>
{
public override int Read(
ref Utf8JsonReader reader,
Type typeToConvert,
JsonSerializerOptions options)
{
return 1;
}
public override void Write(
Utf8JsonWriter writer,
int value,
JsonSerializerOptions options)
{
writer.WriteStringValue("abcde");
}
}
class Program
{
static void Main()
{
var options = new JsonSerializerOptions();
options.Converters.Add(new MyIntConverter());
int res = JsonSerializer.Deserialize<int>("\"abcde\"", options);
Console.WriteLine(res);
}
}
Результат выполнения кода:
1
Пример
Давайте сериализовать без преобразователя:
using System;
using System.Text.Json;
class Program
{
static void Main()
{
string res = JsonSerializer.Serialize(1);
Console.WriteLine(res);
}
}
Результат выполнения кода:
1
Смотрите также
-
Converters,
список в настройках -
NumberHandling,
числа без своего класса -
Serialize,
запись JSON -
Deserialize,
разбор JSON