2010-03-23 19 views
16

Estoy intentando generar un documento XML que contenga el espacio de nombres predeterminado sin un prefijo usando XmlSerializer, p. Ej.Cómo agrego un espacio de nombres predeterminado sin prefijo usando XMLSerializer

<?xml version="1.0" encoding="utf-8" ?> 
<MyRecord ID="9266" xmlns="http://www.website.com/MyRecord"> 
    <List> 
     <SpecificItem> 

usando el siguiente código ...

string xmlizedString = null; 
MemoryStream memoryStream = new MemoryStream(); 
XmlSerializer xs = new XmlSerializer(typeof(ExportMyRecord)); 
XmlSerializerNamespaces xmlnsEmpty = new XmlSerializerNamespaces(); 
xmlnsEmpty.Add(string.Empty, string.Empty); 
XmlTextWriter xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8); 
xs.Serialize(xmlTextWriter, myRecord, xmlnsEmpty); 
memoryStream = (MemoryStream)xmlTextWriter.BaseStream; 
xmlizedString = this.UTF8ByteArrayToString(memoryStream.ToArray()); 

y estructura de clases ...

[Serializable] 
[XmlRoot("MyRecord")] 
public class ExportMyRecord 
{ 
    [XmlAttribute("ID")] 
    public int ID { get; set; } 

Ahora, lo he intentado varias opciones ...

XmlSerializer xs = new XmlSerializer 
        (typeof(ExportMyRecord),"http://www.website.com/MyRecord"); 

o ...

[XmlRoot(Namespace = "http://www.website.com/MyRecord", ElementName="MyRecord")] 

me da ...

<?xml version="1.0" encoding="utf-8"?> 
<q1:MylRecord ID="9266" xmlns:q1="http://www.website.com/MyRecord"> 
    <q1:List> 
     <q1:SpecificItem> 

necesito el código XML para tener el espacio de nombres sin el prefijo que se va a un proveedor de terceros y rechazan todas las otras alternativas.

Respuesta

29

Hay que ir:

ExportMyRecord instance = GetInstanceToSerializeFromSomewhere(); 
XmlSerializerNamespaces xmlnsEmpty = new XmlSerializerNamespaces(); 
xmlnsEmpty.Add(string.Empty, "http://www.website.com/MyRecord"); 
var serializer = new XmlSerializer(
    instance.GetType(), 
    "http://www.website.com/MyRecord" 
); 
+0

solución perfecta! – viperguynaz

+0

solo quería señalar que no está utilizando xmlnsEmpty y puede omitirse. La sobrecarga de serializar que toma XmlSerializerNamespaces no parece usar el valor de string.empty. – arviman

+0

¡Brillante! también estaba teniendo problemas con ' Eon

Cuestiones relacionadas