首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XmlSerializer转换换行符

XmlSerializer转换换行符
EN

Stack Overflow用户
提问于 2011-02-26 10:41:37
回答 2查看 990关注 0票数 1

我正在尝试将一个对象序列化到内存中,将其作为字符串传递给另一个进程,然后反序列化它。

我发现XML序列化过程将对象中字符串的换行符\r去掉。

代码语言:javascript
运行
复制
byte[] b;
// serialize to memory.
using (MemoryStream ms = new MemoryStream())
{
    XmlSerializer xml = new XmlSerializer(this.GetType());
    xml.Serialize(ms, this);
    b = ms.GetBuffer();
}

// I can now send the bytes to my process.
Process(b);

// On the other end, I use:
using (MemoryStream ms = new MemoryStream(b))
{
    XmlSerializer xml = new XmlSerializer(this.GetType());
    clone = (myObject)xml.Deserialize(ms);
}

如何在不将对象序列化到磁盘的情况下序列化对象,并且不破坏字符串中的换行符?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-26 11:11:59

答案来自另一个帖子,但我在这里重发它,因为我必须对它进行一些调整。

我不得不创建一个新类来管理对内存流的XML读写。这就是它:

代码语言:javascript
运行
复制
public class SafeXmlSerializer : XmlSerializer
{
    public SafeXmlSerializer(Type type) : base(type) { }

    public new void Serialize(StreamWriter stream, object o)
    {
        XmlWriterSettings ws = new XmlWriterSettings();
        ws.NewLineHandling = NewLineHandling.Entitize;

        using (XmlWriter xmlWriter = XmlWriter.Create(stream, ws))
        {
            base.Serialize(xmlWriter, o);
        }
    }
}

因为它是建立在XmlSerializer之上的,所以它的行为应该与预期完全一样。只是当我使用StreamWriter进行序列化时,我会使用“安全”版本的序列化,这样就省去了麻烦。

我希望这对其他人有帮助。

票数 0
EN

Stack Overflow用户

发布于 2011-02-26 10:45:38

字符串应该包含在CDATA部分中,以保留换行符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5124708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档