C# 反序列化包含无效数据类型的xml
我有一个XML文件,我需要将其反序列化为类似于以下内容的对象:C# 反序列化包含无效数据类型的xml,c#,.net,serialization,xml-serialization,C#,.net,Serialization,Xml Serialization,我有一个XML文件,我需要将其反序列化为类似于以下内容的对象: public class TestObject { public string Name { get; set; } public int Size { get; set; } public TestObject() { Name = string.Empty; Size = 0; } } 我的反序列化方法如下所示: private TestObject D
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 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>
这对我来说已经足够好了,但有时,我会得到一个XML文件,其中可能包含无效的数据类型(所谓“无效”,是指它应该映射到的对象属性的类型)。例如,如果我的XML文件如下所示:
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 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
显然,我无法将“abc”转换为对象的整数大小属性。当我尝试反序列化时,我看到一个InvalidOperationException,毫不奇怪,InnerException是“输入字符串格式不正确”。是否可以捕获此错误,为我的对象的属性使用默认值并继续反序列化XML文件的其余部分?如果没有,有人能告诉我,在反序列化过程中处理无效数据是否有公认的“最佳实践”?您需要做的是在反序列化之前验证传入的XML。基本上,您希望避免处理格式错误的XML。验证之后,反序列化程序至少可以确保所有传入的XML都是可反序列化的 您可以创建一个包含案例中有效XML定义的XML模式,然后首先使用XSD(XML模式定义)验证传入的XML(有关更多详细信息,请参见)
祝你好运 只需修复错误处理<代码>abc应该被拒绝,而不是转换。这并不是问题的答案。这不是一个好主意,但在某些情况下,您可能有不好的XML,需要捕获并处理该问题。