Если допустимо иметь объявления псевдонимов на уровне root (т.е. <ReservationDetail xmlns:a="http://schemas.datacontract.org/2004/07/KKR.Service.Presentation.ReservationModel">
et c - который имеет ту же семантику, но не совсем тот же макет), то этого можно достичь, предоставив объект XmlSerializerNamespaces
в вызове Serialize
. Например:
using System;
using System.Xml.Serialization;
[XmlRoot(Namespace = "http://foo/foo")]
public class Foo
{
[XmlElement(Namespace = "http://bar/bar")]
public Bar Bar { get; set; }
}
public class Bar
{}
static class P
{
static void Main()
{
var ns = new XmlSerializerNamespaces();
ns.Add("", "");
// your aliases and uris here!
ns.Add("a", "http://foo/foo");
ns.Add("b", "http://bar/bar");
var obj = new Foo { Bar = new Bar() };
var ser = new XmlSerializer(obj.GetType());
ser.Serialize(Console.Out, obj, ns);
}
}
, который имеет вывод:
<a:Foo xmlns:b="http://bar/bar" xmlns:a="http://foo/foo">
<b:Bar />
</a:Foo>