Como faço para adicionar um espaço de nomes ao fazer XmlSerialization com um XmlWriter?
-
03-07-2019 - |
Pergunta
Eu estou usando o XmlWriter em conjunto com XML serialização. Eu sou capaz de saída a multa XML, mas como incluir o atributo xmlns com o XmlWriter parece estar a escapar-me.
Para escrever o início do documento Eu uso o seguinte:
Writer.WriteStartDocument();
Writer.WriteStartElement("urlset","http://www.sitemaps.org/schemas/sitemap/0.9");
Com a minha XmlWriter criado Eu, então, percorrer SitemapNodes eu criei-los e gravá-los ao stringbuilder subjacente através de serialização como esta:
foreach (uk.co.andrewrea.SitemapNode node in List)
{
Serializer.Serialize(Writer, node);
}
Como eu digo isso funciona bem, mas o namespace acima para o elemento raiz não está incluída. Cada vez que eu tento fisicamente escrever o atributo, xmlns, eu recebo uma exceção que os xmlns é reservado pelo sistema para uso XML, então basicamente eu não posso usar.
Eu sei como fazer isso usando o XmlTextWriter e também usando a classe XmlDocument, mas eu preciso entender como eu conseguir isso usando o XmlWriter e através de serialização.
A seguir tentativa também lança a exceção sobre isso namespace sendo reservados.
foreach (uk.co.andrewrea.SitemapNode node in List)
{
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");
Serializer.Serialize(Writer, node, ns);
}
Exception Details: System.ArgumentException: Prefix "xmlns" is reserved for use by XML.
Solução
Você pode adicionar o espaço de nomes para os atributos XmlSerialization, por exemplo:.
[XmlElement(
ElementName = "Members",
Namespace = "http://www.cpandl.com")]
public Employee[] Employees;
Se você tem controle sobre o código.