我有一个 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 文件的其余部分?如果没有,谁能告诉我在反序列化过程中处理无效数据是否存在普遍认为的“最佳实践”?