Der große Unterschied ist, wenn Sie XmlSerializer
über Unter Klassen zu sagen brauchen - zum Beispiel:
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Car),
new Type[] { typeof(SportCar), typeof(Radio) });
Hier ohne die zusätzlichen Informationen, wenn wäre etwa nicht bekannt (nur aus Car
) entweder SportCar
oder Radio
- so, wenn Sie es ein Objekt geben, das ist eigentlich ein SportCar
, wäre es fehl:
Car car = new SportCar {...};
xmlSerializer.Serialize(destination, car);
Sie können dies auch tun, indem Einstellung [XmlInclude(typeof(SportCar))]
gegen die Car
Typdefinition:
[XmlInclude(typeof(SportCar))]
public class Car {...}
Das ist einfacher, ist aber nur möglich, wenn der Car
Typ in einer Baugruppe, die SportCar
kennt. Aber Sie oft tun wissen dies, so XmlInclude
ist die bevorzugte Option.
Zusätzlich: Es gibt einige Effizienzvorteile von XmlInclude
; Hinter den Kulissen verwendet das System die dynamische Typgenerierung, um XmlSerializer
effizient zu machen. Aus diesem Grund sollten Sie die XmlSerializer
Instanz, die Sie erstellen, im Allgemeinen behalten (und wiederverwenden); zum Beispiel durch Speichern in einem statischen Feld. Das System führt dies jedoch automatisch für die Standardverwendung (new XmlSerializer(typeof(Car))
) durch - d. H. Egal wie oft Sie diesen Konstruktor verwenden, wird der dynamische Code nur einmal generiert. Wenn Sie den komplexeren Konstruktor verwenden (new XmlSerializer(typeof(Car),new Type[] { typeof(SportCar), typeof(Radio) })
), wird jedes Mal die Typgenerierung durchgeführt.
Was ist der Unterschied in der Ausgabe, wenn ich die Sub-Klasse Info angeben? (Ich bin neu im Serialisierungsprozess) – Anonymous
Es gibt keinen Unterschied in der Ausgabe zwischen der Verwendung des XmlInclude-Ansatzes und dem Konstruktor (new Type []) -Ansatz; sie sind gleichwertig. Wenn Sie keine und fragen nach einem XmlSerializer (typeof (Auto)), aber geben Sie ihm ein SportCar - es wird eine Ausnahme auslösen. –
Ich sehe, nach dem Lesen von Thema über XmlSerializer auf C# 3.0 in Kürze und zurück, um Ihre Antwort zu lesen, die über "über Sub-Klassen" erwähnen, es verstehe mich, wie XmlSerializer arbeiten. (Ich kaufe ein anderes Buch, um auf C# zu lernen, schade.) – Anonymous