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);
}
}