Сериализация - просмотр графа объектов из потока

Мне интересно, есть ли способ, которым я могу создать дерево / представление сериализованного графа объекта, и есть ли у кого-нибудь указатели? РЕДАКТИРОВАТЬ Цель состоит в том, чтобы, если мы по какой-то причине столкнемся с проблемой десериализации, мы могли бы фактически просмотреть / создать отчет о сериализованных данных, чтобы помочь нам определить причину проблемы, прежде чем отлаживать код. Кроме того, я хочу расширить это в будущем, чтобы взять два потока (версия 1, версия 2) и выделить различия между ними, чтобы гарантировать, что мы случайно не удалим интересную информацию во время изменения кода. / EDIT

Традиционно мы использовали сериализацию Soap или XML, но они становятся слишком ограниченными для наших нужд, и двоичная сериализация обычно делает все, что нам нужно. Причина, по которой это не было принято, заключается в том, что намного сложнее просматривать сериализованное содержимое, чтобы помочь исправить проблемы с обновлением и т. Д.

Итак, я начал пытаться создать представление для сериализованной информации. Я могу сделать это в определенной степени с помощью конструктора ISerializable:

public A(SerializationInfo info, StreamingContext context)
{}

Учитывая информацию о сериализации, я могу отразить член m_data и увидеть фактическое сериализованное содержимое.Проблема с этим подходом:

  1. Он будет отображать только ветвь дерева, я хочу отобразить все дерево от корня, и это невозможно сделать с этой позиции.
  2. Это не удобное место для опроса информации, я бы хотел передать поток классу и выполнять там работу.

Я видел класс ObjectManager, но он работает с существующим графом объектов, тогда как мне нужно иметь возможность работать с потоком данных. Я просмотрел BinaryFormatted, который использует ObjectReader и __BinaryParser, подключаясь к ObjectManager (который, как я думаю, будет иметь все содержимое, возможно, только в виде плоского списка), но для его репликации или вызова всего этого через отражение (2 из этих 3 классов являются внутренними) кажется довольно большой работой, поэтому мне интересно, есть ли лучший подход.

6
задан Ian 10 November 2011 в 12:58
поделиться