我正在尝试将一个对象序列化到内存中,将其作为字符串传递给另一个进程,然后反序列化它。
我发现XML序列化过程将对象中字符串的换行符\r去掉。
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);
}如何在不将对象序列化到磁盘的情况下序列化对象,并且不破坏字符串中的换行符?
发布于 2011-02-26 11:11:59
答案来自另一个帖子,但我在这里重发它,因为我必须对它进行一些调整。
我不得不创建一个新类来管理对内存流的XML读写。这就是它:
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进行序列化时,我会使用“安全”版本的序列化,这样就省去了麻烦。
我希望这对其他人有帮助。
发布于 2011-02-26 10:45:38
字符串应该包含在CDATA部分中,以保留换行符。
https://stackoverflow.com/questions/5124708
复制相似问题