XML Serialisierung und Reflection

Fireworx

Grünschnabel
Hi!

Ich hab ein Problem:
Ich hab mir eine Klasse geschrieben, die ein grafisches Rechteck darstellt. Wenn ich die per XML serialisieren will, krieg ich immer eine Exception:
Zusätzliche Informationen: Fehler beim Reflektieren des Typs 'VisionObjects.Utilities.GraphicRectangle'.
Ausserdem: Was zur Hölle ist Reflection ? :(

thx
FX
 
Juhuuu! :) :) :) :) :) :) :) :)
Hab's selber hingekriegt: In der Klasse war ein TreeNode und 2 Brush-Member. Leider lassen sich TreeNodes und Brushes gar nicht serialisieren. Weder per XML noch binär. :(

mfg.
FX
 
Reflection ist die Möglichkeit, Informationen über das eigene Programm bzw. die Klassen darin abzurufen.

Wenn eine Objekt serialisiert wird, untersucht .NET das Objekt mit Reflection, listet die Mitglieder und Methoden auf usw.
Die relevanten Informationen werden dann entweder binär oder in XML in eine Datei geschrieben.

Beim deserialisieren sucht .NET nach einer Entsprechung in allen bekannten Klassen, instanziert ein Objekt und gleicht es an die serialisierte Instanz an. Schon hast du dein Objekt wieder.

Ich musste einmal bei einem Programm Objekte unbekannter Klasse aus einer Datei heraus instanzieren. In der Datei waren nur die Klassennamen:

[SORRY] Ich bin leider Visual Basic programmierer [/SORRY]

Code:
'//Assemblyinformationen laden
Dim This As [Assembly] = ThisAssembly
        Dim TypeArray() As Type = This.GetTypes()
        Dim ThisType As Type

        '//Alle Typen druchlaufen
        For Each ThisType In TypeArray
            '//Typ ist Klasse, im Namespace "MyNamespace" und ist vom Typ
            '//MyBaseClass (auch davon abgeleitet)
            If ThisType.Namespace = "MyNamespace" And _
 ThisType.IsClass And ThisType.Name = MyBaseClass Then

                '//Type bzw. Klasse gefunden
                '//Methoden Signatur-Array erstellen
                Dim TypeAr() As Type = {GetType(String)}

                '//passenden Konstruktor finden
                Dim SubNew As System.Reflection.ConstructorInfo = _
ThisType.GetConstructor(TypeAr)

                '//ParameterArray zusammenstellen
                Dim Params() As Object = {Parameter}

                '//Konstruktor aufrufen und Objekt entgegen nehmen
                Dim Obj As MyClass = CType(SubNew.Invoke(Params), MyClass)
                Return MyClass 
            End If
        Next

Ich hoffe, ich habe keinen Fehler geschrieben und mich einigermassen verständlich ausgedrückt.

P.S.: Ich bin leider an der XML-Serialisierung gescheitert und verwende immer die Binäre. Sieht auch cooler aus :)
 
Zuletzt bearbeitet:
Zurück