如何使用 xmlns 反序列化 xml?

How to deserialize xml with xmlns?

你如何用 xmlns 反序列化 xml?下面是包含 xmlns 属性的简化 xml,它无法使用下面的代码进行反序列化。我不断收到的内部异常是:

{"<nzb xmlns='http://www.nzb.com'> was not expected."}

代码

TextReader tr = new StreamReader("nzb.xml");
XmlReaderSettings settings = new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore };
XmlReader xmlReader = XmlReader.Create(tr, settings);                
XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "nzb";
xRoot.IsNullable = true;
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Nzb), xRoot);
Nzb nzbFile = (Nzb)xmlSerializer.Deserialize(xmlReader);
xmlReader.Close();

NzbClass

[XmlRoot("nzb", Namespace = "urn:http://www.nzb.com")]
public class Nzb
{

}

nzb.xml

<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE nzb>
<nzb xmlns="http://www.nzb.com">
</nzb>

您的 XML 根属性覆盖导致了 XmlSerialiser 中的问题。这已在 class Nzb 的 XmlRoot 属性中定义。所以以下将起作用:

        XmlReader xmlReader = XmlReader.Create(tr, settings);
        XmlSerializer xmlSerializer = new XmlSerializer(typeof(Nzb));
        Nzb nzbFile = (Nzb)xmlSerializer.Deserialize(xmlReader);
        xmlReader.Close();            

但是,您需要将 Nzb XMLRoot 属性的命名空间更改为:

[XmlRoot("nzb", Namespace = "http://www.nzb.com")]