2010-09-23 58 views
5

我想序列化一個對象並且\ 0(空)字符被追加到生成的字符串。爲什麼?追加 0(反斜槓0或Null)字符的Xml序列化?

我的代碼:

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

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

我的解決辦法是用一個空字符串

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

由於更換空字符。

回答

10

MemoryStream.GetBuffer()返回MemoryStream的底層緩衝區(其大於存儲在其中的實際數據)。你想要MemoryStream.ToArray()

不過,我建議你使用的StringWriter代替MemoryStream,這樣就可以避免在UTF-8的轉換:

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

參見:Serialize an object to string

+0

好極了!這工作,並感謝您的建議......我會全面實施。謝謝。 – 2010-09-23 15:55:25

+0

謝謝。當我在不同的上下文中使用ToArray時,我正在使用MemoryStream.GetBuffer。最終找到我的路。 :) – Greg 2011-05-10 15:16:57