NetDataContractSerializer и несоответствие версий сборки - PullRequest
2 голосов
/ 22 марта 2011

Я использую NetDataContractSerializer для обмена данными между приложениями.Мне бы хотелось, чтобы метод ReadObject вызывал исключение, когда версии сборки не совпадают.

Теперь, например, когда я сериализовал свой объект из версии сборки 1.0.0.0 и позже десериализовать его, имея ту же сборку, но теперь версия 1.0.0.1, NetDataContractSerializer успешно глотает поток и десериализовывается без проблем.

Можно ли прервать процесс десериализации, когда версии не совпадают?

ОБНОВЛЕНИЕ: Мне нужна непереносимость версий по многим причинам.Это как требование клиента, так и требование быть абсолютно уверенным в том, что импорт обрабатывает файл, который был экспортирован из той же версии приложения.В случае моего приложения изменение версии делает бесполезным предыдущий процесс импорта, потому что изменение версии означает более или менее вовлеченное изменение внутренней структуры.

1 Ответ

1 голос
/ 22 марта 2011

Уродливо, но эффективно (в идеале на вашем корневом объекте):

[DataMember]
private string AppVersion {
    get { return CurrentAppVersion; }
    set {
        if(value != CurrentAppVersion) throw new InvalidOperationException(
            "Data from version " + value + " is not compatible");
    }
}
private const string CurrentAppVersion = "1.0.11a";
...