XmlSerializer не включает тип, потому что для XmlSerializer принято решение, что тип не важен . Следующие 100% совместимы, например:
namespace X {
public class A {
public string B;
}
}
namespace Y.Z {
[XmlRoot("A"), XmlType("A")]
public class C {
[XmlElement("B")]
public string D {get;set;}
}
}
Это ИМО самый полезный подход, который позволяет:
- простое использование с сгенерированными типами / типами прокси
- переключение между POCO / DTO
- кросс-платформенное и кросс-архитектурное использование (например, использование "полного .NET" сервиса из WP7 / SL / XNA
- простое управление версиями без строгой связи между клиентом и сервером
По сути, я придерживаюсь мнения, что клиент должен точно знать, чего он ожидает, и что полагаться на тип - неправильный подход.