Wie kann ich ein Objekt mit einer Schnittstelle als Eigenschaft serialisieren?

8

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.

    
David Basarab 04.05.2009, 20:07
quelle

5 Antworten

10

Sie haben verschiedene Fehler in Ihrem Code, sonst würde das gut funktionieren.

  1. Im Konstruktor für ClassA setzen Sie eine lokale Variable IB, nicht das IB-Objekt des Objekts.
  2. In ClassB wird in die konkrete Klasse des Objekts zurückgeworfen, anstatt sie als Schnittstellentyp zu belassen.

So sollte Ihr Code aussehen:

%Vor%     
Erich Mirabal 04.05.2009, 20:23
quelle
2

Implementieren Sie ISerializable für Ihre Objekte, um die Serialisierung zu steuern.

%Vor%     
Greg 04.05.2009 20:24
quelle
0

Wenn Sie die Eigenschaft interface nicht serialisieren möchten, platzieren Sie das folgende Attribut

%Vor%

für die Schnittstelleneigenschaft.

    
rein 04.05.2009 20:10
quelle
0

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.

    
xtofl 04.05.2009 20:21
quelle
-1

Schnittstelleneigenschaften sind nicht serialisierbar. Felder, die auf diese Eigenschaften (in der Unterklasse) verweisen, sind jedoch.

Sie müssen so etwas tun:

%Vor%     
Michael Todd 04.05.2009 20:24
quelle

Tags und Links