如何反序列化C#中的XML名称空间(System.Xml.Serialization)?

问题描述:

我只是对我的Zthes format反序列化器(System.Xml.Serialization)进行了修饰,它在元素“thes”中使用了命名空间“dc”。所有“term”元素都反序列化,因为它们没有名称空间,但我无法弄清楚如何告诉解串器“thes”元素有一个名称空间。如何反序列化C#中的XML名称空间(System.Xml.Serialization)?

下面是我正在尝试做的(不工作),所以希望有人能给我适当的语法。

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

下面是你一个快速的样本...

[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

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

附录:确保“命名空间”是命名空间的完整的URI,而不只是前缀。