我被要求调试使用XmlSerializer类中的Deserialize方法的代码,将带有大而复杂的XML的字符串反序列化为具有给定类型的大而复杂的C#对象。
XML文档来自客户。 XML文档通常存在问题,因此无法正确反序列化。例如,它可能具有非数字值,必须在某处进入数字字段。
当Deserialize发现问题时会抛出异常,但这并不能告诉我哪个XML元素和导致问题的值。这使得在XML文档中发现问题非常耗时。
是否有某种方法或工具可以帮助我查明XML文档中的特定XML元素和/或值?
答案 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);
}