Witam,
Serializuję obiekt, który został zdefiniowany w taki sposób:
[
System.Serializable, System.Xml.Serialization.XmlRoot("Settings")
]
public class PageSettings
{
public PageSettings()
{
this.ElementCollection = new System.Collections.ArrayList();
}
[
System.Xml.Serialization.XmlArray("ElementCollection"), System.Xml.Serialization.XmlArrayItem("Element")
]
public System.Collections.ArrayList ElementCollection
{
set;
get;
}
}
Do PageSettings.ElementCollecyion dodaję obiekty klasy:
[
System.Serializable, System.Xml.Serialization.XmlRoot(Namespace = "http://RoomCollection")
]
public class RoomCollection
{
public RoomCollection()
{
}
}
W wyniku serializacji uzyskuję dokument XML, który wygląda w taki sposób:
<?xml version="1.0" encoding="utf-16"?>
<Settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ElementCollection>
<Element xmlns:q1="http://RoomCollection" xsi:type="q1:RoomCollection" />
</ElementCollection>
</Settings>
I tutaj pojawia się mój problem. Ponieważ taki dokument XML przesyłam dalej gdzie nie będzie on już deserializowany, a jedynie uzupełniony o dane i zapisany. Dane uzupełniane oczywiście mają być w elementach - tag Element. Jednak jeden element może reprezentować instancje różnych klas, które rozróżniam przez definicję Namespace = "...".
Problem w tym, że nie bardzo wiem jak teraz z wykorzystaniem XPath dostać się do jakiegoś Noda w ściśle określonym Elemencie lub podejście z drugiej strony, jak zdefiniować klasę której instancja jest dodawana do ElementCollection by jawnie ustawić namespace by w kodzie XML wyglądał tak:
<Element xmlns:booking="http://RoomCollection" xsi:type="booking:RoomCollection" />
Drugie rozwiązanie jest zdecydowanie bardziej preferowane przeze mnie.
Pozdrawiam,
Grzegorz