【问题标题】:Xml serialization appending the \0 (backslash 0 or Null) character?附加 \0(反斜杠 0 或 Null)字符的 Xml 序列化?
【发布时间】:2011-04-16 08:00:27
【问题描述】:

我正在尝试序列化一个对象,并且 \0(Null)字符被附加到生成的字符串中。为什么?

我的代码:

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

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

我的解决方法是用空字符串替换 Null 字符

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

谢谢。

【问题讨论】:

    标签: c# xml-serialization


    【解决方案1】:

    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

    【讨论】:

    • 太棒了!那行得通,感谢您的建议……我将全面实施。谢谢。
    • 谢谢。当我在不同的上下文中表示 ToArray 时,我使用的是 MemoryStream.GetBuffer。最终在这里找到了我的路。 :)
    猜你喜欢
    • 2011-09-16
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    相关资源
    最近更新 更多