【发布时间】:2012-02-20 10:23:24
【问题描述】:
我正在尝试像这样反序列化一个 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"' 不是预期的。
如何让反序列化器处理额外的 xmlns 属性和 xsi:schemalocation ?
当我删除它们时,代码运行没有错误。
谢谢,迈克尔
【问题讨论】:
-
我不认为这是多个命名空间,我认为是您的类称为 POM 而您的根节点称为项目。
标签: c# .net xml xml-namespaces xmlserializer