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?

2voto

Esperento57 Punkte 14912

Manchmal tritt dieser Fehler auf, weil Sie keinen Konstruktor der Klasse ohne Argument haben

2voto

Darren Punkte 931

Auch ich dachte, dass das Serializable-Attribut auf dem Objekt stehen muss, aber es funktioniert folgendermaßen aus dem SnippetCompiler:

using System;
using System.IO;
using System.Xml;
using System.Collections.Generic;
using System.Xml.Serialization;

public class Inner
{
    private string _AnotherStringProperty;
    public string AnotherStringProperty 
    { 
      get { return _AnotherStringProperty; } 
      set { _AnotherStringProperty = value; } 
    }
}

public class DataClass
{
    private string _StringProperty;
    public string StringProperty 
    { 
       get { return _StringProperty; } 
       set{ _StringProperty = value; } 
    }

    private Inner _InnerObject;
    public Inner InnerObject 
    { 
       get { return _InnerObject; } 
       set { _InnerObject = value; } 
    }
}

public class MyClass
{

    public static void Main()
    {
        try
        {
            XmlSerializer serializer = new XmlSerializer(typeof(DataClass));
            TextWriter writer = new StreamWriter(@"c:\tmp\dataClass.xml");
            DataClass clazz = new DataClass();
            Inner inner = new Inner();
            inner.AnotherStringProperty = "Foo2";
            clazz.InnerObject = inner;
            clazz.StringProperty = "foo";
            serializer.Serialize(writer, clazz);
        }
        finally
        {
            Console.Write("Eine beliebige Taste drücken, um fortzufahren...");
            Console.ReadKey();
        }
    }

}

Ich würde vermuten, dass der XmlSerializer Reflexion über die öffentlichen Eigenschaften verwendet.

1voto

Jeremy Brown Punkte 11

Ich hatte eine Situation, in der die Reihenfolge für zwei aufeinanderfolgende Elemente gleich war

[System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 0, ElementName = "SeriousInjuryFlag")]

.... etwas Code ...

[System.Xml.Serialization.XmlElementAttribute(IsNullable = true, Order = 0, ElementName = "AccidentFlag")]

Als ich den Code geändert habe, um die Reihenfolge für jedes neue Property in der Klasse um eins zu erhöhen, verschwand der Fehler.

1voto

Iqra. Punkte 535

Ich habe den gleichen Fehler bekommen, als ich eine Eigenschaft mit dem Datentyp - Type erstellt habe. Dabei habe ich einen Fehler erhalten - Es gab einen Fehler beim Reflektieren des Typs. Ich habe das 'InnerException' jeder Ausnahme im Debug-Dock überprüft und den spezifischen Feldnamen (der Type war) in meinem Fall erhalten. Die Lösung ist wie folgt:

    [XmlIgnore]
    public Type Type { get; set; }

0voto

Ich habe die NetDataSerialiser Klasse verwendet, um meine Domänenklassen zu serialisieren. NetDataContractSerializer Class.

Die Domänenklassen werden zwischen Client und Server geteilt.

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