Ich habe zwei Schnittstellen IA und IB.
%Vor%Jede Schnittstelle verweist auf die andere.
Ich versuche, ClassA wie unten definiert zu serialisieren.
%Vor%Ich erhalte einen Fehler, wenn ich versuche, zu serialisieren, weil die 2 Eigenschaften Schnittstellen sind. Ich möchte die Eigenschaften serialisieren.
Wie würde ich das umgehen?
Ich brauche Referenzen in jeder Schnittstelle zum anderen. Und ich muss in der Lage sein, die Klasse hin und her zu serialisieren.
Sie haben verschiedene Fehler in Ihrem Code, sonst würde das gut funktionieren.
ClassA
setzen Sie eine lokale Variable IB, nicht das IB-Objekt des Objekts. ClassB
wird in die konkrete Klasse des Objekts zurückgeworfen, anstatt sie als Schnittstellentyp zu belassen. So sollte Ihr Code aussehen:
%Vor%Als Gegenleistung für Ihre Frage: zwei weitere Fragen. Was serialisieren Sie? Ist die Datenbank referenzbereit?
Sie serialisieren keine Schnittstellen; Sie serialisieren Objekte. Das Objekt, das Sie serialisieren, ist entweder eine Implementierung von IA oder IB.
Es hängt vom serialisierten Objekt ab, ob eine Eigenschaft serialisiert werden soll oder nicht. Wenn die Eigenschaft serialisieren muss, sollte sie die Serializable-Schnittstelle implementieren.
Sie können nur eine so genannte "Insel" serialisieren, die durch einen kreisförmigen Bezug A & lt; - & gt; B Wenn die Datenbank die serialisierten Objekte identifizieren kann: Zuerst wird Platz für A zugewiesen, dann beginnt die Serialisierung der Eigenschaften von A. Wenn es bei B ankommt, wird es eine seiner Eigenschaften finden, die sich auf A beziehen. Die Serialisierung sollte dann einen Verweis auf die serialisierte Version von A enthalten.
Es ist wie zwei Bekannte, die zur gleichen Zeit Häuser wechseln: Zuerst werden sie ihre zukünftigen Adressen austauschen, nur dann werden sie sich physisch bewegen.
Schnittstelleneigenschaften sind nicht serialisierbar. Felder, die auf diese Eigenschaften (in der Unterklasse) verweisen, sind jedoch.
Sie müssen so etwas tun:
%Vor%Tags und Links c# serialization interface