JsonSerializable
JsonSerializable ставят на
partial класс, наследник
JsonSerializerContext - это
заказ генератору, а не вызов в
рантайме. Сериализация идёт через
GateContext.Default.Gate и
Serialize.
Члены вроде
JsonInclude
работают как обычно.
Синтаксис
using System.Text.Json.Serialization;
[JsonSerializable(typeof(MyType))]
partial class MyContext : JsonSerializerContext { }
Пример
Давайте сериализовать через контекст:
using System;
using System.Text.Json;
using System.Text.Json.Serialization;
class Gate
{
public string Name { get; set; }
}
[JsonSerializable(typeof(Gate))]
partial class GateContext : JsonSerializerContext
{
}
class Program
{
static void Main()
{
var gate = new Gate { Name = "abcde" };
string res = JsonSerializer.Serialize(
gate, GateContext.Default.Gate);
Console.WriteLine(res);
}
}
Результат выполнения кода:
{"Name":"abcde"}
Пример
Давайте прочитать JSON через контекст:
using System;
using System.Text.Json;
using System.Text.Json.Serialization;
class Gate
{
public string Name { get; set; }
}
[JsonSerializable(typeof(Gate))]
partial class GateContext : JsonSerializerContext
{
}
class Program
{
static void Main()
{
var gate = JsonSerializer.Deserialize(
"{\"Name\":\"abcde\"}",
GateContext.Default.Gate);
string res = gate.Name;
Console.WriteLine(res);
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте объявить контекст как
partial класс:
using System;
using System.Text.Json.Serialization;
class Gate
{
public string Name { get; set; }
}
[JsonSerializable(typeof(Gate))]
partial class GateContext : JsonSerializerContext
{
}
class Program
{
static void Main()
{
bool res = typeof(GateContext).IsAbstract;
Console.WriteLine(res);
}
}
Результат выполнения кода:
False
Смотрите также
-
JsonInclude,
включить непубличное -
JsonPropertyName,
имя в JSON -
JsonIgnore,
не писать поле -
JsonExtensionData,
лишние поля