Prefixos de serialização e namespace XML

Eu estou procurando uma maneira com c # que eu possa serializar uma class em XML e adicionar um namespace, mas defina o prefixo que esse namespace irá usar.

Por fim, estou tentando gerar o seguinte XML:

 something in here  

Eu sei que com o DataContractSerializer eo XmlSerializer eu posso adicionar um namespace, mas eles parecem gerar um prefixo internamente, com algo que eu não sou capaz de controlar. Eu sou capaz de controlá-lo com qualquer um desses serializadores (eu posso usar qualquer um deles)?

Se eu não conseguir controlar a geração dos namespaces, precisarei escrever meu próprio serializador XML e, em caso afirmativo, qual é o melhor para escrevê-lo?

    Para controlar o alias de namespace, use XmlSerializerNamespaces .

     [XmlRoot("Node", Namespace="http://flibble")] public class MyType { [XmlElement("childNode")] public string Value { get; set; } } static class Program { static void Main() { XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("myNamespace", "http://flibble"); XmlSerializer xser = new XmlSerializer(typeof(MyType)); xser.Serialize(Console.Out, new MyType(), ns); } } 

    Se você precisar alterar o namespace em tempo de execução, você poderá usar adicionalmente XmlAttributeOverrides .

    Ao usar o código gerado a partir de um esquema no qual os tipos têm namespaces, essa substituição do namespace se aplica no nível raiz, mas as tags de tipos diferentes terão o namespace associado à class.

    Eu tive a oportunidade de usar duas classs geradas diferentes, mas tenho espaços de nomes diferentes com base em qual servidor eu estava falando (não pergunte não sob o meu controle).

    Eu tentei todas as substituições oferecidas aqui e finalmente desisti e usei um tipo de método de força bruta que realmente funcionou muito bem. O que eu fiz foi serializar para uma string. Em seguida, use string.replace para alterar os namespaces e, em seguida, postou o stream a partir da string usando um stringwriter. O mesmo na resposta – capture em uma string – manipule o namespace e depois desserialize a string de um escritor de string.

    Pode não ser elegante ou usar todos os overrides fantasia, mas tem o trabalho feito.