Заголовок говорит почти то, что я хотел бы знать. У меня есть данные, которые были двоично сериализованы, и теперь я читаю их снова (имя класса остается прежним), и я хотел бы знать, пропускает ли сериализатор что-то, потому что, например, частное резервное поле могло быть переименовано.
Я сделал следующий рефакторинг:
private string descriptionField;
public string Description
{
get { return this.descriptionField; }
}
to
public string Description { get; private set; }
Как указано в этой статьи, это не Работа. Но я действительно хотел бы знать, есть ли способ определить, не соответствует ли класс сериализованным данным.
Я не хочу сам выполнять сериализацию через реализацию ISerializable
, потому что класс и его свойства довольно велики и могут быть изменены. Я бы предпочел более простое решение =)
ISerializable
, у вас будет больше контроля над этим (вы знаете, что читаете: если одно поле не сохранено, оно не будет инициализировано, просто проверяйте перед каждым чтением). - person Adriano Repetti   schedule 22.10.2014BinaryFormatter
). Также я не хочу использоватьISerializable
, потому что класс довольно большой - person DerApe   schedule 23.10.2014OptionalFieldAttribute
! Он существует, потому чтоBinaryFormatter
может бросить в этом случае. Это просто не его поведение по умолчанию, чтобы включить его, установитеBinaryFormatter.AssemblyFormat
вFormatterAssemblyStyle.Full
. Тем не менее, это не правильный способ управления этими вещами...ISerializable
есть, даже если это довольно раздражает писать (ну,BinaryFormatter
- но в целом сериализация - не правильный выбор для сохранения приложения данные между версиями, если вы не делаете довольно тривиальные вещи). - person Adriano Repetti   schedule 23.10.2014