我的上下文是.NET PCL Profile111。
我尝试将DataContractSerializer
与XmlDictionaryWriter
一起用于二进制xml序列化。我遇到的问题是,在我处理XmlDictionaryWriter
MemoryStream
后,它正在编写以便关闭。
我的代码:
using (XmlDictionaryWriter writer = XmlDictionaryWriter.CreateBinaryWriter(outputStream))
{
DataContractSerializer serializer = new DataContractSerializer(iObject.GetType());
serializer.WriteObject(writer, iObject);
writer.Flush();
}
//outputStream is closed now.
XmlWriterSettings的文档默认情况下CloseOutput属性为 false 。
我无法将XmlDictionaryWriter.CreateBinaryWriter
的重载用于ownsStream
参数,因为它在PCL中不可用。
如何在XmlDictionaryWriter
被处置后让Stream
让输出XmlDictionaryWriter
生效?
答案 0 :(得分:2)
鉴于您的PCL版本上的重载XmlDictionaryWriter.CreateBinaryWriter(outputStream, null, null, false)
不可用,您有两个类似于Is there any way to close a StreamWriter without closing its BaseStream?中描述的选项:
您可以刷新但不处理XmlDictionaryWriter
并将其留给GC进行清理。与Dispose()
方法不同,终结方法不处理基础流。
为您的流创建一个包装器Stream
,在处理时,不会释放基础流。例如。 Jon Skeet在MiscUtil。
NonClosingStreamWrapper
醇>
答案 1 :(得分:0)