Laden...

PropertyInfo, Interfaces, Reflection - serialisieren ohne Serialisierer ... Problem :)

1 Antworten
1,114 Aufrufe
Letzter Beitrag: vor 14 Jahren
PropertyInfo, Interfaces, Reflection - serialisieren ohne Serialisierer ... Problem :)

Hallo zusammen,

nach langer Zeit der Abstinenz plagt mich mal wieder ein .NET Problem 😃 Die Frage ist größtenteils für mich noch akademischer Natur, da ich gerade die verschiedenen Möglichkeiten auslote.

Folgendes Szenario:

Ich benutze ein COM-Interface, für das ein .NET Wrapper (eine Ansammlung von Interfaces sowie als "internal" deklariert die das Interface implementierenden Klassen) definiert sind. Die Klassen wiederum implementieren die Funktionalität der COM-Schnittstelle.

Die COM-Schnittstelle kann nicht angepasst werden, die .NET Schnittstelle - falls möglich - ebenfalls nicht.

Mein Problem:

Prinzipiell handelt es sich um ein Serialisierungsproblem. Ich möchte einige der Collections ("eigene" Collections die im Wrapper definiert sind) persistent speichern, damit User ihre Arbeit unterbrechen können, ohne Daten zu verlieren.

Leider ist es nicht möglich, Interfaces zu serialisieren (benötigt ja einen konkreten Typ). An die Klassen selbst komme ich "von außen" wegen "internal" auch nicht heran (ist ja auch gut so..meistens).

Meine Ansätze waren bisher folgende:

  1. Ich erweitere die internen Klassen des Wrappers sowie die Interfaces insofern, das jede Klasse eine List mit PropertyInfo-Objekten liefern kann.

  2. Ich versuche über Reflection, direkt an die Werte zu kommen und weg zu speichern, ohne die Klassen bzw. die Interfaces zu erweitern.

Meine Einschätzungen:

zu 1.: Finde ich persönlich am elegantesten. Funktioniert soweit.
zu 2.: Weniger elegant, funktioniert aber ebenfalls.

Meine Probleme 😃

zu 1.:
Ich muss die Schnittstellen und deren Implementierung erweitern was nicht unbedingt gewünscht ist.
Außerdem habe ich das Problem der "Selbstreflektion". Das heißt, dass sich mein Property in sich selbst nochmal befindet, da es ja ebenfalls ein Property ist. Das müsste ich noch - möglichst ohne feste Namen etc. - vermeiden.

zu 2.: Das gecode an der Stelle mit Schleifen, Typecasts usw. finde ich nicht sonderlich schick und viel zu kompliziert. Vielleicht stehe ich auch nur auf dem Schlauch und denke zu kompliziert.

Allgemein: Da der Serialisierer wegfällt und ich somit auch an der Stelle ISerializable nicht implementieren kann habe ich das Problem, wie ich dann enstprechende Objekte selbst deserialisiere und ihnen per Reflection und Schleifen die gespeicherten Properties wieder zuweisen kann.

Interessant bei Punkt 1 wäre: Wie müsste ein Setter für das Property (Liste) über alle Properties aussehen? 😃

Ich hoffe, ich konnte das Problem soweit verständlich wieder geben.

Konkreter Code ist auch nicht direkt notwendig (aber schön, wenn jemand schon sowas kennen sollte). Mir würden auch Ansätze oder Hinweise helfen. Den rest krieg ich dann schon 😃

Viele Grüße

SB