Хорошо, я задал несколько вопросов, прежде чем на SO о сериализации, но я все еще застрял - так что я думаю, что я просто выплюнул весь свой случай, а не субабъекты в надежде, что кто-то может указать мой нос в правое направление :)Сериализация графика с двунаправленными ссылками, (dll) импортными типами и версиями ..?
Мое приложение похоже на «Quartz Composer» от Apple, что означает, что у меня есть древовидная структура подключенных узлов.
Узлы определяются интерфейсом INode; фактические типы узлов/классы импортируются из DLL с использованием MEF, поэтому типы узлов не будут известны во время компиляции.
Узлы подключены, поэтому могут быть и двунаправленные связи.
Я хотел бы сохранить свою «композицию» - все дерево узлов - в файл, желательно для человека, как XML. Я действительно хочу избежать сохранения в проприетарном формате!
Так что мне нужно сериализовать это:
дерева объектов, чьи классы может быть импортировано во время выполнения (и, таким образом, не известно заранее), которые могут содержать двунаправленную связь.
Кроме того, я хотел бы сохранить информацию о версии для используемых классов узлов, поэтому можно определить, была ли сохранена «композиция» с использованием более старой версии некоторого класса узлов, чем используемый класс dll/node в текущем приложении.
Ранее я указывал на DataContractSerializer, который, кажется, как отличный инструмент для хранения моего дерева и полностью поддерживает двунаправленные связи.
Но если я хочу, чтобы сериализовать мое дерево (интерфейс IComposition), он начинает жаловаться на неизвестных типах - я должен указать каждый конкретный тип он может столкнуться при сериализации дерева ...
А также нет никакого способа, для меня указать, какая версия сборки использовалась для определенного класса узлов.
Как-то сначала не нужно перечислять все мое дерево, чтобы узнать, какие классы-узлы были использованы, добавить их в список известных типов и затем сериализовать.
И даже тогда мне нужно будет найти способ добавить раздел к информации о параметрах вывода данных для используемых классов.
Возможно, я единственный, у кого есть эта проблема, но я действительно надеюсь, что кто-то еще столкнулся с этой проблемой раньше и, возможно, с ее элегантным решением;) Я могу себе представить, что это не то, что может быть обработано стандартом .NET-сериализатор, но, возможно, есть сторонняя (бесплатная, с открытым исходным кодом даже?) Реализация?
Кстати, я думаю, вы имели в виду «.NET Serializer», а не «C# Serializer». –
Мои извинения, вы правы :) – Pygmy