Überraschende InvalidOperationException im XmlSerializer ab .Net 4.0

29. Juni 2010

Es gibt eine kleine Änderung im XmlSerializer seit der Version 4.0 des .Net Frameworks. MSDN erwähnt die Änderung mit dem Satz “In the  the XmlSerializer class no longer serializes objects that are marked as [Obsolete].”. Nicht nur ist die Grammatik des Satzes falsch, auch bedeutet das: Objekte, die mit [Obsolete] gekennzeichnete Properties enthalten, können ggf. nicht mehr korrekt (de)serialisiert werden.

Es bedeutet außerdem: Niemals das Obsolete-Attribut in einer enum verwenden!

Der Grund ist einfach: wenn eine Entität mit dem enum-Wert “a” serialisiert wurde, kann sie nach dem Markieren des Wertes “a” mit dem Obsolete-Attribut nicht mehr gelesen werden. Eine InvalidOperationException wird statt dessen gefeuert.

Diese Änderung bedeutet weiterhin, dass das Obsolete-Attribut nicht mehr länger ein Hinweis an den Programmierer ist, sondern ggf. vorhandene Daten unlesbar machen kann.