La deserialización provoca copias de entradas de lista

Me gustaría crear una capa de modelo muy general, que también se puede pasar como JSON. Un modelo debe mostrar un panel LED de un RaspberryPi2. Como me gustaría modelar la Clase para que esté lo más cerca posible de la realidad, forzo una Lista para que siempre tenga 8 * 8 Leds. La clase se ve así:

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

El problema surge con la serialización: estoy usando NewtonSoft. Json.Net Serializer, y por lo que he visto, primero accede al Getter, lo que hace que Logic cree los Leds y luego los configura. La única solución que se me ocurrió sería un deserializador personalizado o algún tipo de shennenigans de constructor. También parece que el Deserializer no usa la propiedad Set del valor de VisualLeds, ya que mi Debugger-Stop nunca fue golpeado.

¿Existe alguna posibilidad fácil de tener lo mejor de ambos mundos? Me gustaría tener el Modelo lo más general posible sin la necesidad de Custom-Deserializer.

Respuestas a la pregunta(1)

Su respuesta a la pregunta