A desserialização causa cópias de entradas de lista

Eu gostaria de criar uma Model-Layer muito geral, que também pode ser transmitida como JSON. Um modelo deve mostrar um painel de LED de um RaspberryPi2. Como gostaria de modelar a classe para estar o mais próximo possível da realidade, forço uma lista a ter sempre 8 * 8 Leds. A classe está assim:

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

O problema surge com a serialização: estou usando o NewtonSoft. O Json.Net Serializer, e até onde eu vi, primeiro acessa o Getter, que faz com que a lógica crie os Leds e os define posteriormente. A única solução em que eu poderia pensar seria em um desserializador personalizado ou algum tipo de shennenigans do Constructor. Também parece que o Deserializer não usa a propriedade Set do VisualLeds-Value, pois meu Debugger-Stop nunca foi atingido.

Existe uma possibilidade fácil de ter o melhor dos dois mundos? Eu gostaria de ter o modelo o mais geral possível, sem a necessidade de desserializador personalizado.

questionAnswers(1)

yourAnswerToTheQuestion