Я работаю с сериализацией с использованием 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
}
}
Однако, это просто обходной путь, и я также должен позаботиться о том, чтобы уникальное значение не устанавливалось откуда-то еще. Мне просто нужно знать, есть ли какой-то другой способ узнать, является ли установленное нулевое значение из сохраненного файла или устанавливается, потому что файл старый и не содержит свойства.