【发布时间】:2012-07-22 07:12:27
【问题描述】:
我正在使用 XmlSerializer 和 StreamWriter,如下所示:
...
string xmlFile = GetXMLLocation(objToSaveType);
XmlSerializer Serializer = new XmlSerializer(objToSaveType);
using (StreamWriter sw = new StreamWriter(xmlFile))
Serializer.Serialize(sw, objToSave);
...
这在绝大多数情况下都有效,但生成的文件很少充满空字符,并且偶尔会出现问题文件仅以空字符结尾,例如。
...
<Extension>0</Extension>
</OrderProductLine>
<OrderProductLine>
<ProductDescription />
<Commission>0.3</Commission>
<UnitType />
<UnitPrice>0</UnitPrice>
<UnitQuantity>0</UnitQuantity>
<PackageType />
<Extension>0</Extension>
[null x ~1 million]
我自己从来没有复制过它。它在序列化时不会产生任何错误,并且似乎只在程序关闭时发生。
相关问题:
-
here - 明显的修复,作家没有冲洗;我正在使用
using,它调用与 Close() 相同的 Dispose() - here - 最佳答案假设有错误被遗漏;我的不会产生错误;空文件和一个用空值填充的文件是不一样的。尽管如此,其中一个答案表明这是一个缓存问题。
如果缓存问题的想法是正确的,我已经修改了我的代码:
string xmlFile = GetXMLLocation(objToSaveType);
XmlSerializer Serializer = new XmlSerializer(objToSaveType);
using (Stream file = new FileStream(xmlFile, FileMode.Create,
FileAccess.Write, FileShare.None,
0x1000, FileOptions.WriteThrough))
using (StreamWriter sw = new StreamWriter(file))
Serializer.Serialize(sw, objToSave);
我有一些解决方法的想法(主要是在保存后立即反序列化、回滚或在出现问题时重试),但如果能解决该死的问题会很棒。由于它是如此断断续续,我还不知道上面是否修复了它。这篇文章要么是为了通知其他处于类似情况的人可能的修复,要么是为了获得其他可能原因的想法。谢谢阅读。 (P.S. 第一个 SO 帖子,如果我违反了任何协议,请见谅!)
更新:一个多星期后,该错误尚未再次出现。我的手指交叉,虽然我真的需要大约一个月才能合理确定地知道这是否解决了问题。
更新:两周半后,还是不错的。
希望最终更新:一个多月后,仍然很好。毕竟缓存似乎是个问题,耶!
【问题讨论】:
-
我们也看到了这个错误;它主要发生在“现场”(我们注意到它,当客户抱怨他们丢失了数据时)。您使用哪个版本的 .Net?
标签: .net c#-4.0 xml-serialization streamwriter