Ich habe eine Klasse, die ein statisches Verzeichnis aller vorhandenen Instanzen enthält, die zur Kompilierungszeit definiert sind.C# DataContract Serialisierung, wie zu bereits vorhandenen Instanz deserialisieren
Grundsätzlich sieht es wie folgt aus:
[DataContract]
class Foo
{
private static Dictionary<long, Foo> instances = new Dictionary<long, Foo>();
[DataMember]
private long id;
public static readonly Foo A = Create(1);
public static readonly Foo B = Create(2);
public static readonly Foo C = Create(3);
private static Foo Create(long id)
{
Foo instance = new Foo();
instance.id = id;
instances.Add(instance);
return instance;
}
public static Foo Get(long id)
{
return instances[id];
}
}
Es gibt andere Felder, und die Klasse abgeleitet wird, aber dies für das Problem spielt keine Rolle.
Nur die id
ist serialisiert. Wenn eine Instanz dieses Typs deserialisiert wird, möchte ich die Instanz, die erstellt wurde, als das statische Feld (A
, B
oder C
) mit Foo.Get(id)
abrufen, anstatt eine neue Instanz zu erhalten.
Gibt es eine einfache Möglichkeit, dies zu tun? Ich habe keine Ressourcen gefunden, die ich verstehen konnte.
Ich will eigentlich nicht die Verwendung von Klasse betroffen sein, weil 'foo' eine sehr zentrale Klasse und verwendet aus viele andere Arten. –
Wie würde diese Implementierung aussehen? –
siehe meine bearbeitete Antwort – ironic