Как создать префиксы тегов с помощью XmlSerializer

Я хотел бы сгенерировать следующее с помощью XmlSerializer:

<atom:link href="#" onclick="location.href='http://dallas.example.com/rss.xml'; return false;" rel="self" type="application/rss+xml" />

Итак, я попытался добавить пространство имен в свой элемент:

[...]

    [XmlElement("link", Namespace="atom")]
    public AtomLink AtomLink { get; set; }

[...]

Но выход:

<link xmlns="atom" href="#" onclick="location.href='http://dallas.example.com/rss.xml'; return false;" rel="self" type="application/rss+xml" />

Итак, каков правильный способ генерации префиксных тегов?

Ответы

Ответ 1

Прежде всего, пространство имен атомов обычно равно:

xmlns:atom="http://www.w3.org/2005/Atom"

Чтобы ваши теги использовали префикс пространства имен atom, вам необходимо пометить свои свойства:

[XmlElement("link", Namespace="http://www.w3.org/2005/Atom")]
public AtomLink AtomLink { get; set; }

Вам также нужно указать XmlSerializer использовать его (спасибо @Marc Gravell):

XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("atom", "http://www.w3.org/2005/Atom");
XmlSerializer xser = new XmlSerializer(typeof(MyType));
xser.Serialize(Console.Out, new MyType(), ns);