2012-02-20 51 views
2

我試圖反序列化這樣一個XML文件(它實際上是一個Maven POM但現在這並不重要......):如何使用的XmlSerializer來deserialise具有多個xlmns XML屬性

<?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

我不認爲這是多個namespsaces,我認爲這是你的類被稱爲POM和你的根節點被稱爲項目。 – 2012-02-20 10:40:34

回答

1

只需添加ElementNameXmlRootAttribute,因爲你的根元素有project名,即:

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

基里爾(和本),非常感謝。發現!無論如何,我已經將該類重命名爲Project,因爲這就是它(我正在掛上POM ......)。 – Micdev42 2012-02-21 12:25:42

+0

@ Micdev42,歡迎。 – 2012-02-21 12:30:07

0

放的ElementName = 「項目」 中的XML根屬性見下文

[XmlRoot(ElementName="project" ,Namespace = "http://maven.apache.org/POM/4.0.0")] 
public class POM 
{ 
    [XmlElement("modelVersion")] 
    public string ModelVersion { get; set; } 
} 
+0

相同的答案已經存在。 – 2012-02-20 11:04:16

+0

是的..我的網頁沒有刷新當你回答..我知道我發佈答案後 – 2012-02-21 10:37:07

相關問題