Как отличить присутствие сериализованных данных в файле при десериализации? - PullRequest
0 голосов
/ 09 сентября 2018

Я работаю с сериализацией с использованием DataContract Serializer и сталкиваюсь с некоторыми проблемами с обнуляемыми типами данных.

Я только что добавил новое свойство DataMember пользовательского типа в сериализованный класс.

[DataMember]
public CustomObject NewProperty
{
   public get;
   public set;
}

Теперь проблема в том, что значение этого свойства может быть установлено на null, и это допустимое значение для свойства. Нет проблем при сохранении и чтении объекта. Проблема возникает, когда я пытаюсь обеспечить обратную совместимость сохраненного файла.

Если я получаю нулевое значение, я не уверен, установлено ли значение в ноль или если оно нулевое, потому что его нет в файле, который читается. Просто я должен выполнить другую обработку, если читаемый файл старый.

Я сделал обходной путь для достижения описанного выше поведения с помощью комбинации атрибута OnDeserializing и установки некоторого уникального значения для моего свойства, просто чтобы проверить его позже, если оно из-за чтения старого файла или нет.

Примерно так:

[OnDeserializing]
private void OnDeserializing(StreamingContext context)
{
   //this.NewProperty = some unique value;
}

private void ProcessData()
{
    if(this.NewProperty == unique value)
    {
        //Do something
    }
    else
    {
        //Do Something else
    }
}

Однако, это просто обходной путь, и я также должен позаботиться о том, чтобы уникальное значение не устанавливалось откуда-то еще. Мне просто нужно знать, есть ли какой-то другой способ узнать, является ли установленное нулевое значение из сохраненного файла или устанавливается, потому что файл старый и не содержит свойства.

...