我正在使用带有 StreamWriter 的 XmlSerializer,如下所示:
...
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]
我自己从来没有能够复制它。它在序列化时不会产生任何错误,并且似乎只在程序关闭时发生。
相关问题:
- 在这里- 明显的修复,作家没有冲洗;我正在使用
using
与 Close() 相同的调用 Dispose() - 这里- 最好的答案假设一个错误被遗漏了;我的不会产生错误;空文件和一个用空值填充的文件是不一样的。尽管如此,其中一个答案表明这是一个缓存问题。
如果缓存问题的想法是正确的,我已经修改了我的代码如下:
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);
我有一些解决方法的想法(主要是在保存后立即反序列化、回滚或在出现问题时重试),但修复该死的东西会很棒。由于它是如此断断续续,我还不知道上面是否修复了它。这篇文章要么是为了告知其他处于类似情况的人可能的修复方法,要么是为了获得其他可能原因的想法。谢谢阅读。(PS First SO post,对不起,如果我破坏了任何协议!)
更新:一个多星期后,该错误尚未再次出现。我的手指交叉,虽然我真的需要大约一个月才能合理确定地知道这是否解决了问题。
更新:两周半后,仍然很好。
希望最终更新:一个多月后,仍然很好。毕竟缓存似乎是个问题,耶!