4

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?

Antwort

2

Wenn die Serialisierung und Deserialisierung nur innerhalb Ihrer Anwendung erfolgt und wenn keine anderen Benutzer die serialisierten Daten lesen können, hat das Serialisierungsformat keine Auswirkungen auf die API: soweit ein Benutzer von die API betroffen ist, werden Sie in eine undurchsichtige Datei serialisieren und daraus deserialisieren.

Verwenden Sie in diesem Fall DataContractSerializer, da dieser bei Bedarf in Binärdateien serialisiert werden kann.

+0

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. –

+0

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. –

+0

* @ John Saunders * Definieren von XML nur ein Serialisierungsformat ist zu reduktiv ... – Luca