Десериализовать двоичные данные, не зная точного написанного типа - PullRequest
1 голос
/ 05 января 2012

Я столкнулся с проблемой небольшого количества объектов данных, сохраненных с использованием BinaryFormatter, возвращается с отсутствующими параметрами (ноль / по умолчанию).

Я хотел бы знать, были ли отсутствующие элементы сохранены как нулевые, или объекты, которые были сериализованы, были изменены из версий в системе контроля версий, а затем возвращены перед фиксацией кода (например, int numDogs против unsigned int dogCount) ,

Первый будет представлять серьезную ошибку в коде проверки данных, выполненном до завершения сериализации; в то время как последние - просто ненужные данные в тестовой БД.

Так как BinaryFormatter способен вывести все остальное, когда элемент изменен / добавлен / удален, я предполагаю, что он пишет объекты в форме, аналогичной хранилищу значений ключей. Есть ли способ получить удобочитаемое представление о нем, не пытаясь угадать точные детали объекта, который был сериализован?

1 Ответ

2 голосов
/ 05 января 2012

Если вы реализуете ISerializable на своих объектах, вы можете взглянуть на то, что было сериализовано, пытаясь десериализовать.

Вам нужно будет добавить конструктор с такой же сигнатурой, что и ISerializable.GetObjectData - здесь происходит десериализация.

...