Deserialisierung führt zu Kopien von Listeneinträgen

Ich möchte einen sehr allgemeinen Model-Layer erstellen, der auch als JSON übergeben werden kann. Ein Modell sollte ein LED-Panel eines RaspberryPi2 zeigen. Da ich die Klasse so modellieren möchte, dass sie der Realität möglichst nahe kommt, erzwinge ich, dass eine Liste immer 8 * 8 Leds enthält. Die Klasse sieht so aus:

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

Das Problem tritt bei der Serialisierung auf: Ich benutze die NewtonSoft. Json.Net Serializer, und soweit ich das gesehen habe, greift es zuerst auf den Getter zu, wodurch die Logik die Leds erstellt und sie anschließend setzt. Die einzige Lösung, die ich mir vorstellen könnte, wäre entweder ein Custom-Deserializer oder eine Art Konstruktor-Spielerei. Es sieht auch so aus, als würde der Deserializer die Set-Eigenschaft des VisualLeds-Wertes nicht verwenden, da mein Debugger-Stop nie getroffen wurde.

ibt es eine einfache Möglichkeit, das Beste aus beiden Welten zu haben? Ich möchte, dass das Modell so allgemein wie möglich ist, ohne dass ein Custom-Deserializer erforderlich ist.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage