正在诊断XML反序列化错误
本文关键字:反序列化 错误 XML 诊断 | 更新日期: 2023-09-27 18:25:13
我被要求调试使用XmlSerializer类中的Deserialize方法将具有大型复杂XML的字符串反序列化为具有给定类型的大型复杂C#对象的代码。
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);
}