次のようなクラスがあります(大幅に簡略化されています):
public class Foo
{
public enum Value
{
ValueOne,
ValueTwo
}
[XmlAttribute]
public Value Bar { get; set; }
}
外部ソースから XML ファイルを受信しています。彼らのドキュメントには、Foo 要素の Bar 属性には「ValueOne」または「ValueTwo」しかないと記載されています (XSD は提供されません)。
したがって、次のようにデシリアライズします。
var serializer = new XmlSerializer(typeof(Foo));
var xml = "<Foo Bar=\"ValueTwo\" />";
var reader = new StringReader(xml);
var foo = (Foo)serializer.Deserialize(reader);
...そしてそれはすべてうまくいきます。
しかし、昨夜、代わりに次のような XML が送られてきて、逆シリアル化に失敗しました (当然のことですが)。<Foo Bar="" />
これを防御的にコーディングする良い方法はありますか? 理想的には、「ここで何か問題が発生した場合は、ValueOne をデフォルトに設定してください」のようなことを言いたいと思います。1 つの属性が破損したため、XML ファイル全体を破棄したくありません。