Como faço para adicionar um espaço de nomes ao fazer XmlSerialization com um XmlWriter?

StackOverflow https://stackoverflow.com/questions/614640

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.
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top