【发布时间】:2016-05-19 13:27:19
【问题描述】:
我的上下文是 .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 在XmlDictionaryWriter 被处理后让输出Stream 生效?
【问题讨论】:
-
不知道如何实现这一点,但您误会了一件事。
CloseOutput属性是调用Close方法时的行为设置。不是Dispose。可能需要关闭Stream在此类中正确实现IDisposable。如果我是作者,我会这样做。另外,你为什么要这样做?也许有另一种方法可以达到您想要的效果。 -
@Peuczyński 我查看了
XmlDictionaryWriter.Dispose源代码,它继承自XmlWriter,只是在里面调用了Close方法。 -
我就是这么想的。你还没有告诉你要达到什么目标。
-
@dbc Wrapper for the MemoryStream ... 可以工作。将此作为答案发布。谢谢。
标签: c# .net serialization xml-serialization