我正在尝试反序列化这样的XML文件(它实际上是一个maven POM,但现在不重要......):
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
</project>
我有一个手工定义的POM类:
[XmlRoot(Namespace= "http://maven.apache.org/POM/4.0.0")]
public class POM
{
[XmlElement("modelVersion")]
public string ModelVersion{ get; set; }
}
...和我的反序列化代码:
FileStream fileStream = File.Open("pom.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
var codec = new XmlSerializer(typeof(POM));
var pom = (POM) codec.Deserialize(fileStream);
当我运行这个时,我得到InvalidOperationException:'project xmlns =“http://maven.apache.org/POM/4.0.0”'不是预期的。
如何让deserialzer处理额外的xmlns属性和xsi:schemalocation?
当我删除它们时,代码运行没有错误。
谢谢,迈克尔
答案 0 :(得分:1)
只需将ElementName
添加到XmlRootAttribute
,因为您的根元素名称为project
,即:
[XmlRoot(Namespace = "http://maven.apache.org/POM/4.0.0", ElementName = "project")]
答案 1 :(得分:0)
将ElementName =“project”放在xml根属性中,见下面的
[XmlRoot(ElementName="project" ,Namespace = "http://maven.apache.org/POM/4.0.0")]
public class POM
{
[XmlElement("modelVersion")]
public string ModelVersion { get; set; }
}