Saltar al contenido

Prefijos de espacio de nombres y serialización XML

Solución:

Para controlar el alias del espacio de nombres, 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);
    }
}

Si necesita cambiar el espacio de nombres en tiempo de ejecución, puede utilizar adicionalmente XmlAttributeOverrides.

Cuando se usa código generado a partir de un esquema donde los tipos tienen espacios de nombres, esta anulación del espacio de nombres se aplica en el nivel raíz, pero las etiquetas dentro de los diferentes tipos tendrán el espacio de nombres asociado con la clase.

Tuve la ocasión de necesitar usar dos clases generadas diferentes pero tener espacios de nombres diferentes según el servidor con el que estaba hablando (no preguntes, no bajo mi control).

Probé todas las anulaciones que se ofrecen aquí y finalmente me rendí y utilicé una especie de método de fuerza bruta que en realidad funcionó bastante bien. Lo que hice fue serializar en una cadena. Luego use string.replace para cambiar los espacios de nombres y luego publique el flujo de la cadena usando un stringwriter. Lo mismo en la respuesta – capturar en una cadena – manipular el espacio de nombres y luego deserializar la cadena de un escritor de cadenas.

Puede que no sea elegante o no use todas las anulaciones elegantes, pero hizo el trabajo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *