Я пишу программу, которая создает древовидную структуру, составленную из классов, которые наследуются от абстрактного Node
класса.В мою программу встроено несколько разных типов узлов.Тем не менее, я также хочу позволить более опытным пользователям иметь возможность ссылаться на мою библиотеку и писать свои собственные производные Node
.Эти подключаемые библиотеки затем загружаются при запуске моего приложения через Assembly.Load()
.Таким образом, все потенциальные типы Node
, используемые моим приложением, не будут известны до времени выполнения.
Кроме того, я хочу иметь возможность сериализации и десериализации этих деревьев в файлы XML и из них.У меня есть некоторый опыт работы с XMLSerializer, DataContractSerializer и реализацией IXmlSerializable.Как правило, я использую DataContractSerializer, поскольку для него обычно требуется меньше кода, чем для реализации IXmlSerializable, и я могу сериализовать закрытые поля, где XmlSerializer не может.из моего класса, а также придется добавить любой код или атрибуты, необходимые для их сериализации.
Учитывая это, есть ли причины, по которым я должен использовать один механизм сериализации поверх другого?