Десериализация вызывает копирование списков
Я хотел бы создать очень общий Model-Layer, который также можно передать как JSON. Одна модель должна иметь светодиодную панель RaspberryPi2. Поскольку я хотел бы, чтобы Класс был как можно ближе к реальности, я заставляю Список всегда иметь 8 * 8 светодиодов. Класс выглядит так:
public class VisualLedPanel
{
private readonly Lazy<List<VisualLed>> _lazyVisualLeds = new Lazy<List<VisualLed>>(CreateVisualLeds);
public VisualLed this[int x, int y]
{
get
{
var result = VisualLeds.FirstOrDefault(f => f.X == x && f.Y == y);
return result;
}
}
public IEnumerable<VisualLed> VisualLeds
{
get
{
return _lazyVisualLeds.Value;
}
set
{
var tt = value;
}
}
private static List<VisualLed> CreateVisualLeds()
{
var result = new List<VisualLed>();
for (var x = 0; x <= 7; x++)
{
for (var y = 0; y <= 7; y++)
{
result.Add(new VisualLed(x, y));
}
}
return result;
}
}
Проблема возникает с сериализацией: я использую NewtonSoft. Json.Net Serializer, и, насколько я видел, сначала получает доступ к Getter, который заставляет Logic создавать светодиоды, а затем устанавливает их впоследствии. Единственное решение, о котором я мог подумать, - это либо Custom-Deserializer, либо какой-нибудь конструктор shennenigans. Также кажется, что Deserializer не использует Set-Property для VisualLeds-Value, так как мой Debugger-Stop никогда не срабатывал.
Есть ли легкая возможность получить лучшее из обоих миров? Я хотел бы, чтобы Модель была как можно более общей, без использования Custom-Deserializer.