2010-09-23 7 views
5

Estoy tratando de serializar un objeto y el carácter \ 0 (nulo) se anexa a la cadena generada. ¿Por qué?serialización Xml que agrega el carácter 0 (barra invertida 0 o nula)?

Mi código:

XmlSerializer serializer = new XmlSerializer(typeof(Common.PlanogramSearchOptions)); 
MemoryStream memStream = new MemoryStream(); 
serializer.Serialize(memStream, searchOptions); 

string xml = Encoding.UTF8.GetString(memStream.GetBuffer()); // appends \0 

Mi solución es reemplazar el carácter nulo con una cadena vacía

xml.Replace("\0", string.Empty) 

Gracias.

Respuesta

10

MemoryStream.GetBuffer() devuelve el almacenamiento intermedio subyacente del MemoryStream (que es más grande que los datos reales almacenados en él). Quiere MemoryStream.ToArray().

Sin embargo, le recomiendo que utilice un StringWriter en lugar de MemoryStream, lo que puede evitar la conversión UTF-8:

XmlSerializer serializer = new XmlSerializer(typeof(PlanogramSearchOptions)); 
StringWriter writer = new StringWriter(); 
serializer.Serialize(writer, searchOptions); 
string xml = writer.ToString(); 

Ver también: Serialize an object to string

+0

Excelente! Eso funcionó y gracias por su sugerencia ... implementaré eso en todos los ámbitos. Gracias. –

+0

Gracias. Estaba usando MemoryStream.GetBuffer cuando quise ToArray en un contexto diferente. Encontré mi camino aquí eventualmente. :) – Greg