Laden...

Fremde Klasse Serializieren

Erstellt von christof.k vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.227 Views
C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 17 Jahren
Fremde Klasse Serializieren

Hallo!

Ich habe eine fremde Klasse mit zig von Eigenschaften die ich zwecks Dokumentation gerne serialisieren möchte. Eine Deserialisierung ist nicht nötig, wenn es weitere Problem birgt.
Ungern würde ich jede Eigenschaft seperat behandeln.

Kann mir jemand helfen? Ich habe bereits nach "serialisieren" gesucht doch noch keinen Beitrag gefunden der mein Problem erörtert.

Vielen Dank
Christof

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo christof.k,

wo ist denn dein Problem? Serialisierung ist der SDK-/MSDN-Doku ausführlich beschrieben. Auch hier im Forum gibt es Codebeispiele dazu.

herbivore

C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 17 Jahren

Hi!

Alles was ich bisher gefunden habe läuft darauf hinaus, eine Klasse mit [Serializable] zu erstellen und diese dann zu serialisieren.
D.h. ich muss einen Wrapper für meine gegebene Klasse schreiben in der jede Eigenschaft einzeln widergespiegelt wird.

Ich habe noch nichts gefunden, womit ich auf einen Schlag die Serialisierung dieser fremden Klasse erledigen kann.

Kannst Du mir eine Stelle im SDK nennen? Meine Stichworte waren irgendwie nicht so richtig.

Dankeschön
Christof

S
8.746 Beiträge seit 2005
vor 17 Jahren

Fragen:

  1. In welches Format willst du Serialisieren? XML, binär oder benutzerdefiniert?
  2. Mußt du auch private Felder serialisieren?
S
8.746 Beiträge seit 2005
vor 17 Jahren

Original von christof.k
Alles was ich bisher gefunden habe läuft darauf hinaus, eine Klasse mit [Serializable] zu erstellen und diese dann zu serialisieren.

Als Serializable müssen nur Klassen ausgezeichnet werden, die mittels Binary/SoapFormatter serialisiert werden. Der XmlSerializer nimmt jede Klasse und serialisiert alle öffentlichen Felder.

Was du mit den Wrappern meinst ist mir unklar. Man serialisiert ein Objekt immer auf einen Rutsch, auch Sub-Objekte werden serialisiert.

C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 17 Jahren

Ich muss nur public Eigenschaften serialisieren (fast nur Basisdatentypen) und auf das Format bin ich nicht festgelegt. Je lesbarer desto besser.

Danke
Christof

S
8.746 Beiträge seit 2005
vor 17 Jahren

Dann nimm den XMLSerializer.

C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 17 Jahren

Sorry, aber im Moment habe ich keinen Startpunkt.
Hast Du zufällig etwas Zeit mit eine Richtung aufzuzeigen?
Hab das Thema Serialisierung noch nicht angepackt und bisher nur Beispiele gefunden, die auf eigenen Klassen (mit dem "Serializable" Attribut) aufbauen.

Danke
Christof

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo christof.k,

Meine Stichworte waren irgendwie nicht so richtig.

Stichwort: Serialisierung (im Index eingegeben). Der entsprechende Abschnitt heißt ebenso.

Wie man einen Wrapper schreibt, ist vermutlich auch nicht in der SDK-Doku beschrieben.

Das einfachste wird sein, den Wrapper als 'Benutzerdefinierte Serialisierung' (ebenfalls ein Abschnitt in der SDK) zu implementieren. Dazu per Reflection (PropertyInfo.GetValue) in einer Schleife alle Properties (oder wahlweise über alle Fields) lesen und serialisieren (SerializationInfo.AddValue).

herbivore

S
8.746 Beiträge seit 2005
vor 17 Jahren

Original von christof.k
Hab das Thema Serialisierung noch nicht angepackt und bisher nur Beispiele gefunden, die auf eigenen Klassen (mit dem "Serializable" Attribut) aufbauen.

Ob eigene Klassen oder nicht ist komplett Wurscht. Man kann grundsätzlich jede Klasse mit dem XMLSerializer serialisieren:

 
      XmlSerializer serializer =  new XmlSerializer(typeof(deineKlasse));
      FileStream fs = new FileStream(filename, FileMode.Create);
      TextWriter writer = new StreamWriter(fs, new UTF8Encoding());
      serializer.Serialize(writer, objectVonDeinerKlasse);
      writer.Close();

Bei eigenen Klassen hat man allerdings noch die Möglichkeit, die Serialisierung selbst zu beeinflussen, z.B. die Namen der Elemente, ob Element oder Attribut verwendet wird, Ausschluss von Feldern, etc.!

C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 17 Jahren

Vielen Dank!

Das hat geklappt. Sorry dass ich diesmal so unverständig war....irgendwie muss es die Hitze sein 😉

Christof

S
8.746 Beiträge seit 2005
vor 17 Jahren

Es sei noch angemerkt, dass .NET ein Tool namens xsd.exe beiliegt, welches es ermöglicht aus einem XML Schema passende .NET-Klassen zu generieren. Sehr hilfreich, wenn man gegen Schema-Schnittstellen codieren muss.