Serialisierung generischer Eigenschaften

9

Kann mir jemand erklären, warum dieses erste Beispiel in XML serialisiert wird, und das zweite wird Laufzeitfehler ausgeben, wenn es darum geht, alle Typen zu konvertieren? Wenn ich die XmlElement -Attribute aus dem zweiten Beispiel entferne, wird es serialisiert, aber der Name des XML-Elements wird falsch sein ("Element" anstelle des für seinen Typ angegebenen). Das erste Snippet wurde mithilfe der XSD-Datei mithilfe der Schemadatei generiert.

Besser noch, gibt es eine Möglichkeit, dies zum Laufen zu bringen? Ich würde viel lieber generische Typen verwenden, die zu / von Objekten werfen. Es macht viel saubereren Code. Das explizite Umwandeln von Objekten zeigt, dass ein Problem in Ihrem Design besteht.

%Vor%

Dies wird nicht serialisiert.

%Vor%

Und zur weiteren Erklärung habe ich versucht, alle zusätzlichen Typen anzugeben, wenn ich das Objekt XmlSerializer erstelle, und das hilft nicht.

Dies ist die Ausnahme, die ausgelöst wird:

%Vor%

'

Bei dem generischen Typ ist es sinnvoll, zu sehen, wie der Typ zur Kompilierungszeit spezifisch gebunden ist. Aber wenn ich sehe, wie es mit einer Objektreferenz funktioniert, sollte es meines Erachtens auch mit dem generischen Typ funktionieren.

    
MonkeyWrench 11.02.2011, 19:18
quelle

3 Antworten

2

Ich denke, dass die CS0029 Compiler-Fehlerseite auf MSDN liefert die Informationen, nach denen Sie suchen.

Nachdem ich diesen Artikel gelesen habe, funktioniert Ihr erstes Beispiel, weil in Ihrer Klasse keine Konvertierung stattfindet. Da Sie eine Object übergeben, gibt es keine Konvertierung, die ausgeführt werden muss, und es werden keine Compilerfehler ausgegeben.

Im zweiten Beispiel ist der Typ erst zur Laufzeit bekannt. Durch die Angabe mehrerer XmlElement-Attribute ist der Compiler der Meinung, dass alle diese Typen austauschbar sein müssen. Da Sie jedoch keine expliziten Konvertierungen für diese bereitgestellt haben, ist der Compiler davon betroffen, dass eine Konvertierung zwischen den beiden Typen eine einschränkende Konvertierung sein kann und den Fehler auslöst.

    
pmartin 11.02.2011, 19:57
quelle
2

Haben Sie sich die Seite Generics FAQ unter der "Wie stimme ich Serialisierung an?" Generische Typen "Frage? Es kann dir helfen.

    
DevSlick 11.02.2011 19:55
quelle
0

Die einzige Möglichkeit, verschiedene serialisierte Elemente für verschiedene Typen zu verwenden, ist die Verwendung von object oder IXmlSerializable .

Leider kann der XmlSerializer nicht auf nicht öffentliche Eigenschaften zugreifen. Wenn Sie das Objekt als object über eine zweite public -Eigenschaft verfügbar machen, ist die Serialisierung möglich. Ich würde es jedoch nicht in realen Situationen verwenden:

%Vor%     
Jaroslav Jandek 11.02.2011 21:55
quelle