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