2009-10-09 13 views
5

Właśnie kończę mój deserializator Zthes format (System.Xml.Serialization), który używa przestrzeni nazw "dc" w elemencie "thes". Wszystkie elementy "termin" deserializują dobrze, ponieważ nie mają przestrzeni nazw, ale nie mogę wymyślić, jak powiedzieć deserializatorowi, że elementy "thes" mają przestrzeń nazw.Jak deserializować przestrzenie nazw XML w języku C# (System.Xml.Serialization)?

Oto, co próbuję zrobić (co nie działa), więc mam nadzieję, że ktoś mógłby podać mi odpowiednią składnię.

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

Odpowiedz

8

Oto krótka próbka dla Ciebie ...

[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

Ten fragment kodu naprawdę pomogło. Dzięki Matthew. – Junto

+0

Cieszę się, że mogę pomóc! –

+0

OP to pytanie dotyczące deserializacji, a nie serializacji. Metoda deserializacji nie przyjmuje parametru XmlSerializerNamespaces. –

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

Uzupełnienie: Upewnij się, że „nazw” to pełna URI przestrzeni nazw, a nie tylko przedrostek.

Powiązane problemy