我希望创建一个通用的模型层,可以作为JSON传递。一个模型应该展示树莓派2的LED面板。由于我希望将类模型尽可能地贴近现实,我强制要求列表始终具有8 * 8个LED灯。类如下:
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序列化器,据我所见,它首先访问Getter,导致逻辑创建Leds,然后再设置它们。唯一的解决方案是自定义反序列化程序或某种构造函数技巧。似乎反序列化程序也没有使用VisualLeds-Value的Set-Property,因为我的Debugger-Stop从未触发。
有没有简单的方法可以兼顾两全?我希望模型尽可能通用,不需要自定义反序列化程序。