【发布时间】:2012-10-10 13:41:57
【问题描述】:
我有一个 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 文件的其余部分?如果没有,谁能告诉我在反序列化期间处理无效数据是否存在普遍认为的“最佳实践”?
【问题讨论】:
-
修复你的错误处理。
<size>abc</size>应该被拒绝,而不是转换。
标签: c# .net serialization xml-serialization