诊断XML反序列化错误

时间:2015-12-01 09:44:49

标签: c# xml serialization

我被要求调试使用XmlSerializer类中的Deserialize方法的代码,将带有大而复杂的XML的字符串反序列化为具有给定类型的大而复杂的C#对象。

XML文档来自客户。 XML文档通常存在问题,因此无法正确反序列化。例如,它可能具有非数字值,必须在某处进入数字字段。

当Deserialize发现问题时会抛出异常,但这并不能告诉我哪个XML元素和导致问题的值。这使得在XML文档中发现问题非常耗时。

是否有某种方法或工具可以帮助我查明XML文档中的特定XML元素和/或值?

1 个答案:

答案 0 :(得分:0)

事实证明,当您反序列化字符串而不是XML文档时,异常中的诊断信息要好得多。

我试图反序列化XML文档:

// Deserializing XML document, exceptions don't give line numbers or fields 
XmlNode rootNode = ... XML document ... 
using (var reader = new XmlNodeReader(rootNode))
{
    var serializer = new XmlSerializer(typeof (T));
    return (T) serializer.Deserialize(reader);
}

但是,我发现如果你反序列化一个字符串,你会得到违规元素所在的行号(在XML字符串中)。

// Deserializing XML string, exceptions now give line number    
string serializedXmlString = .... XML string ...
using (var reader = new StringReader(serializedXmlString))
{
    var serializer = new XmlSerializer(typeof(T));
    return (T)serializer.Deserialize(reader);
}