次のようなオブジェクトに逆シリアル化する必要があるXMLファイルがあります。
public class TestObject
{
public string Name { get; set; }
public int Size { get; set; }
public TestObject()
{
Name = string.Empty;
Size = 0;
}
}
私の逆シリアル化メソッドは次のようになります。
private TestObject DeserializeConfiguration(string xmlFileName)
{
XmlSerializer deserializer = new XmlSerializer(typeof(TestObject));
TextReader textReader = new StreamReader(xmlFileName);
TestObject testObj = (TestObject)deserializer.Deserialize(textReader);
textReader.Close();
return testObj;
}
これは私にとっては十分に機能していますが、場合によっては、無効なデータ型を含む可能性のあるXMLファイルを取得します(「無効」とは、マップする必要のあるオブジェクトプロパティの型を意味します)。たとえば、私のXMLファイルが次のようになっている場合:
<?xml version="1.0" encoding="utf-8"?>
<TestObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>Orion</Name>
<Size>abc</Size>
</TestObject>
明らかに、「abc」をオブジェクトの整数のSizeプロパティに変換することはできません。これを逆シリアル化しようとすると、InvalidOperationExceptionが表示されますが、当然のことながら、InnerExceptionは「入力文字列が正しい形式ではありませんでした」です。このエラーをキャッチし、オブジェクトのそのプロパティにデフォルト値を使用して、XMLファイルの残りの部分の逆シリアル化を続行することは可能ですか?そうでない場合、逆シリアル化中に無効なデータを処理するための一般的に見なされている「ベストプラクティス」があるかどうかを誰かに教えてもらえますか?