Мы широко используем сериализацию / десериализацию xml в нашем проекте для передачи данных между несколькими приложениями. У нас есть общий xsd, из которого мы генерируем классы c #, затем используем XmlSerializer для перехода от xml к объектам и обратно.
Проблема в том, что одно приложение обновляется для добавления новых значений перечисления, а другое приложение еще не обновлено. Теперь приложение, которое не обновлено, пытается десериализовать xml и завершается ошибкой, так как не знает о новом перечислении.
Если у нас есть app1 и app2, в поле все работает правильно, то app2 обновляется новым значением перечисления в xsd и обновляется для клиента в поле. Внезапно app1 ломается, потому что не знает о enum, app1 может даже не использовать это поле enum, не влияет на app1, но все равно ломается.
Есть ли какие-либо известные способы обойти это? По сути, я хочу определить, что делать, когда перечисление не найдено, использовать значение по умолчанию или, если перечисление имеет нулевой тип, и установить его на нуль.
В этой ситуации возникают исключения как XmlSerializer, так и DataContractSerializer.
Я посмотрел на пользовательский проект сериализации xml YAXLib (http://www.codeproject.com/KB/XML/yaxlib.aspx), это также вызывает исключение, но есть исходный код и может быть изменено. Этот проект использует различные атрибуты свойств и потребует немало изменений но, вероятно, выполнимо.
Любые другие предложения.