Мне интересно, есть ли способ, которым я могу создать дерево/представление сериализованного графа объектов, и есть ли у кого-нибудь указатели? РЕДАКТИРОВАТЬ Цель состоит в том, чтобы, если по какой-то причине мы столкнемся с проблемой десериализации, мы могли фактически просмотреть/создать отчет о сериализованных данных, чтобы помочь нам определить причину проблемы, прежде чем приступать к отладке. код. Кроме того, я хочу расширить это в будущем, чтобы взять два потока (версия 1, версия 2) и выделить различия между ними, чтобы гарантировать, что мы случайно не удалим интересную информацию во время изменений кода. /РЕДАКТИРОВАТЬ
Традиционно мы использовали сериализацию Soap или XML, но они становятся слишком ограниченными для наших нужд, и двоичная сериализация обычно делает все, что нам нужно. Причина, по которой это не было принято, заключается в том, что гораздо сложнее просматривать сериализованное содержимое, чтобы помочь исправить проблемы с обновлением и т. д.
Итак, я начал пытаться создать представление сериализованной информации. Я могу сделать это из конструктора ISerializable в определенной степени:
public A(SerializationInfo info, StreamingContext context)
{}
Учитывая информацию о сериализации, я могу отразить член m_data и увидеть фактическое сериализованное содержимое. Проблема с этим подходом заключается в том,
- Он будет отображать только ветку от дерева, я хочу отобразить все дерево от корня и с этой позиции это не реально сделать.
- Это неудобное место для опроса информации, я хотел бы передать поток классу и выполнить там работу.
Я видел класс ObjectManager, но он работает с существующим графом объектов, тогда как мне нужно иметь возможность работать с потоком данных. Я просмотрел BinaryFormatted, который использует ObjectReader и __BinaryParser, подключаясь к ObjectManager (который, я думаю, будет иметь все содержимое, просто, возможно, в плоском списке), но чтобы воспроизвести это или вызвать все это через отражение (2 из этих 3 классов являются внутренними) похоже, довольно много работы, поэтому мне интересно, есть ли лучший подход.