2010-04-02 26 views
9

Estoy serializando un objeto en mi programa ASP.NET MVC en una cadena xml como esta;Cómo establecer xmlns al serializar el objeto en C#

StringWriter sw = new StringWriter(); 
XmlSerializer s = new XmlSerializer(typeof(mytype)); 
s.Serialize(sw, myData); 

Ahora esto me da esto como las primeras 2 líneas;

<?xml version="1.0" encoding="utf-16"?> 
<GetCustomerName xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 

mi pregunta es, ¿Cómo puedo cambiar las xmlns y el tipo de codificación, al serializar?

Gracias

Respuesta

6

Lo que encontré que las obras fue la de añadir esta línea a mi clase,

[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://myurl.com/api/v1.0", IsNullable = true)] 

y añadir esto a mi código para agregar espacio de nombres cuando llamo serializar

XmlSerializerNamespaces ns1 = new XmlSerializerNamespaces(); 
    ns1.Add("", "http://myurl.com/api/v1.0"); 
    xs.Serialize(xmlTextWriter, FormData, ns1); 

siempre que ambos espacios de nombres emparejar funciona bien

6

El tipo XmlSerializer tiene un segundo parámetro en su constructor, que es el espacio de nombres XML por defecto - los "xmlns:" espacio de nombres:

XmlSerializer s = new XmlSerializer(typeof(mytype), "http://yourdefault.com/"); 

para definir la codificación, me gustaría sugerir que utilice un lugar de XmlTextWriter una recta StringWriter y crear algo como esto:

XmlWriterSettings settings = new XmlWriterSettings(); 
settings.Encoding = Encoding.UTF8; 

XmlTextWriter xtw = XmlWriter.Create(filename, settings); 

s.Serialize(xtw, myData); 

En el XmlWriterSettings, puede definir una plétora de opciones - incluyendo la codificación.

Cuestiones relacionadas