2009-10-09 122 views
5

我只是對我的Zthes format反序列化器(System.Xml.Serialization)進行了修飾,它在元素「thes」中使用了命名空間「dc」。所有「term」元素都反序列化,因爲它們沒有名稱空間,但我無法弄清楚如何告訴解串器「thes」元素有一個名稱空間。如何反序列化C#中的XML名稱空間(System.Xml.Serialization)?

下面是我正在嘗試做的(不工作),所以希望有人能給我適當的語法。

[XmlElement("namespace:someElement")] 
public string SomeElement; 

回答

8

下面是你一個快速的樣本...

[XmlRoot("myObject")] 
public class MyObject 
{ 
    [XmlElement("myProp", Namespace = "http://www.whited.us")] 
    public string MyProp { get; set; } 

    [XmlAttribute("myOther", Namespace = "http://www.whited.us")] 
    public string MyOther { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var xnames = new XmlSerializerNamespaces(); 
     xnames.Add("w", "http://www.whited.us"); 
     var xser = new XmlSerializer(typeof(MyObject)); 
     using (var ms = new MemoryStream()) 
     { 
      var myObj = new MyObject() 
      { 
       MyProp = "Hello", 
       MyOther = "World" 
      }; 
      xser.Serialize(ms, myObj, xnames); 
      var res = Encoding.ASCII.GetString(ms.ToArray()); 
      /* 
       <?xml version="1.0"?> 
       <myObject xmlns:w="http://www.whited.us" w:myOther="World"> 
        <w:myProp>Hello</w:myProp> 
       </myObject> 
      */ 
     } 
    } 
} 
+0

這段代碼確實幫助。謝謝馬修。 – Junto 2010-05-17 12:13:25

+0

很高興我能幫到你! – 2010-05-17 13:18:51

+0

OP的問題是關於反序列化,而不是序列化。反序列化方法不接受XmlSerializerNamespaces參數。 – 2016-04-30 10:01:39

1
[XmlElement("someElement", Namespace="namespace")] 
public string SomeElement; 

附錄:確保「命名空間」是命名空間的完整的URI,而不只是前綴。

相關問題