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
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
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
Fragen:
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.
Ich muss nur public Eigenschaften serialisieren (fast nur Basisdatentypen) und auf das Format bin ich nicht festgelegt. Je lesbarer desto besser.
Danke
Christof
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
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
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.!
Vielen Dank!
Das hat geklappt. Sorry dass ich diesmal so unverständig war....irgendwie muss es die Hitze sein 😉
Christof
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.