我正在尝试反序列化这样的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:'xmlns =“ http://maven.apache.org/POM/4.0.0”项目不是预期的。

如何获得解串器以应对其他xmlns属性和xsi:schemalocation?

当我删除它们时,代码运行没有错误。

谢谢迈克尔

最佳答案

只需将ElementName添加到XmlRootAttribute,因为您的根元素具有project名称,即:

[XmlRoot(Namespace = "http://maven.apache.org/POM/4.0.0", ElementName = "project")]

关于c# - 如何使用XmlSerializer序列化具有多个xmlns属性的XML,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9359554/

10-12 18:24