367 Stimmen

XmlSerializer - Es ist ein Fehler beim Reflexionsvorgang des Typs aufgetreten.

Verwenden von C# .NET 2.0, ich habe eine zusammengesetzte Datenklasse, die das [Serializable] Attribut hat. Ich erstelle eine XMLSerializer Klasse und übergebe sie dem Konstruktor:

XmlSerializer serializer = new XmlSerializer(typeof(DataClass));

Ich erhalte eine Ausnahme mit der Meldung:

Es trat ein Fehler beim Reflektieren des Typs auf.

In der Datenklasse gibt es ein weiteres zusammengesetztes Objekt. Braucht auch dieses das [Serializable] Attribut, oder wird es durch das Attribut am obersten Objekt rekursiv auf alle Objekte darin angewendet?

0voto

Kiran.Bakwad Punkte 544
[System.Xml.Serialization.XmlElementAttribute("strFieldName", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]

Oder

[XmlIgnore]
string [] strFielsName {get;set;}

0voto

Curious Dev Punkte 48

Ich hatte das gleiche Problem und in meinem Fall hatte das Objekt eine ReadOnlyCollection. Eine Sammlung muss die Add-Methode implementieren, um serialisierbar zu sein.

0voto

chxzy Punkte 489

Ich habe bisher eine etwas andere Lösung für alles, was hier bisher beschrieben wurde, also hier ist meine für jede zukünftige Zivilisation!

Ich hatte einen Datentyp "Zeit" deklariert, da der ursprüngliche Typ ein TimeSpan war und später zu einem String geändert wurde:

[System.Xml.Serialization.XmlElementAttribute(DataType="time", Order=3)]

allerdings war der tatsächliche Typ ein String

public string TimeProperty {
    get {
        return this.timePropertyField;
    }
    set {
        this.timePropertyField = value;
        this.RaisePropertyChanged("TimeProperty");
    }
}

indem man die Eigenschaft DataType entfernt, kann das Xml serialisiert werden

[System.Xml.Serialization.XmlElementAttribute(Order=3)]
public string TimeProperty {
    get {
        return this.timePropertyField;
    }
    set {
        this.timePropertyField = value;
        this.RaisePropertyChanged("TimeProperty");
    }
}

0voto

Phil Wright Punkte 22034

Bitte beachten Sie auch, dass Benutzeroberflächensteuerelemente nicht serialisiert werden können und dass jedes Objekt, das Sie in die Zwischenablage übergeben möchten, serialisierbar sein muss, da es sonst nicht an andere Prozesse übergeben werden kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X