using Lattice.Core.Models; using System.Text.Json; using System.Text.Json.Serialization; namespace Lattice.Core.Persistence; /// /// Конвертер для полиморфной сериализации и десериализации узлов дерева Lattice. /// public class LayoutJsonConverter : JsonConverter { public override LayoutNode? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { using var jsonDoc = JsonDocument.ParseValue(ref reader); var rootElement = jsonDoc.RootElement; // Определяем тип узла по наличию специфических свойств if (rootElement.TryGetProperty("Orientation", out _)) { return JsonSerializer.Deserialize(rootElement.GetRawText(), options); } return JsonSerializer.Deserialize(rootElement.GetRawText(), options); } public override void Write(Utf8JsonWriter writer, LayoutNode value, JsonSerializerOptions options) { // Используем стандартную сериализацию для конкретных типов JsonSerializer.Serialize(writer, (object)value, value.GetType(), options); } }