【发布时间】:2014-01-23 07:31:11
【问题描述】:
我正在尝试使用 WCF DataContractSerializer 将 DataContract 对象序列化为 memoryStream。
然后我使用 memoryStream.ToArray 来获取序列化的内容。
最后,我使用另一个 fileStream 将 memoryStream 持久化到一个文件中。
我最初的工具是这样的。我在持久文件的末尾缺少字节。
public virtual string SerializeTransient(DataObject data, string targetPath)
{
string securityCode;
using (var memoryStream = new MemoryStream())
{
using (var xmlWriter = XmlWriter.Create(memoryStream, new XmlWriterSettings {Indent = true}))
{
_serializer.WriteObject(xmlWriter, data);
using (var fileStream = new FileStream(targetPath, FileMode.Create))
{
securityCode = CalculateSecurityCode(memoryStream.ToArray());
memoryStream.WriteTo(fileStream);
}
}
}
return securityCode;
}
如果我将持久化逻辑移出内部 using{} 块(见下文),则输出是正确的。几乎感觉就像 WriteObject 函数没有完成它正在做的事情。有人可以向我解释那里发生了什么吗?谢谢。
public virtual string SerializeTransient(DataObject data, string targetPath)
{
string securityCode;
using (var memoryStream = new MemoryStream())
{
using (var xmlWriter = XmlWriter.Create(memoryStream, new XmlWriterSettings {Indent = true}))
{
_serializer.WriteObject(xmlWriter, data);
}
using (var fileStream = new FileStream(targetPath, FileMode.Create))
{
securityCode = CalculateSecurityCode(memoryStream.ToArray());
memoryStream.WriteTo(fileStream);
}
}
return securityCode;
}
【问题讨论】: