Ich schreibe ein Programm, das eine Baumstruktur aufbaut, die aus Klassen besteht, die von einer abstrakten Klasse Node
erben. In meinem Programm sind verschiedene Arten von Knoten enthalten. Ich möchte aber auch fortgeschritteneren Benutzern erlauben, auf meine Bibliothek zu verweisen und ihre eigenen Ableitungen von Node
zu schreiben. Diese Plug-in-Bibliotheken werden dann geladen, wenn meine App über Assembly.Load()
gestartet wird. Daher werden alle potenziellen Node
Typen, die von meiner Anwendung verwendet werden, erst zur Laufzeit bekannt sein.Welche XML-Serialisierungsmethode sollte ich für eine öffentliche API verwenden?
Darüber hinaus möchte ich diese Bäume zu und von XML-Dateien serialisieren und deserialisieren können. Ich habe Erfahrung mit XMLSerializer, DataContractSerializer und der Implementierung von IXmlSerializable. Normalerweise gehe ich mit DataContractSerializer, da es normalerweise weniger Code benötigt, als IXMLSerializable implementiert, und kann private Felder serialisieren, wo XmlSerializer das nicht kann.
Aber mit diesem Projekt muss ich auch berücksichtigen, dass andere Benutzer Klassen erstellen werden, die von meiner Klasse ableiten, und müssen auch hinzufügen, welcher Code oder Attribute benötigt werden, um sie auch zu serialisieren.
In Anbetracht dessen gibt es Gründe, warum ich mit einem Serialisierungsmechanismus über einen anderen gehen sollte?
Ja Ich sehe keinen Grund, warum ein anderes Programm als mein Programm diese Dateien serialisieren/deserialisieren müsste, und ich mag auch die Idee, in der Zukunft andere Serialisierungsformate wie Binärdateien zuzulassen. –
Um klar zu sein, das "binäre", das ich meinte, ist das binär-serialisierte XML, das die XmlDictionaryWriter-Klasse ausgeben kann. Wir sind alle an textserialisiertes XML gewöhnt, aber das ist nur ein Serialisierungsformat. –
* @ John Saunders * Definieren von XML nur ein Serialisierungsformat ist zu reduktiv ... – Luca