views:

43

answers:

1

I am trying to serialize an object and the \0 (Null) character is being appended to the generated string. Why?

My code:

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

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

My work around is replacing the Null character with an empty string

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

Thanks.

+1  A: 

MemoryStream.GetBuffer() returns the underlying buffer of the MemoryStream (which is larger than the actual data stored in it). You want MemoryStream.ToArray().

However, I recommend you use a StringWriter instead of MemoryStream, so you can avoid the UTF-8 conversion:

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

See also: Serialize an object to string

dtb
Excellent! That worked and thank you for your suggestion... i will implement that across the board. Thank you.
alex.davis.dev