正在诊断XML反序列化错误

本文关键字:反序列化 错误 XML 诊断 | 更新日期: 2023-09-27 18:25:13

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

XML文档来自客户。XML文档经常出现问题,因此无法正确地反序列化。例如,它可能有一个非数字值,必须进入某个数字字段。

当反序列化发现问题时,它会抛出一个异常,但这并不能告诉我是哪个XML元素和什么值导致了问题。这使得在XML文档中查找问题非常耗时。

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

正在诊断XML反序列化错误

事实证明,当反序列化字符串而不是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);
}