.net 间歇XmlSerializer(部分)空文件
我将XmlSerializer与StreamWriter一起使用,如下所示:.net 间歇XmlSerializer(部分)空文件,.net,c#-4.0,xml-serialization,streamwriter,.net,C# 4.0,Xml Serialization,Streamwriter,我将XmlSerializer与StreamWriter一起使用,如下所示: ... string xmlFile = GetXMLLocation(objToSaveType); XmlSerializer Serializer = new XmlSerializer(objToSaveType); using (StreamWriter sw = new StreamWriter(xmlFile)) Serializer.Serialize(sw, objToSave); ...
...
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]
我有一些解决方法的想法(主要是在保存后立即反序列化、回滚或在出现问题时重试),但修复这个该死的问题会很好。因为它是如此间歇性,我还不知道上面的方法是否修复了它。这篇文章要么是告诉其他处于类似情况的人可能的解决方法,要么是获取其他可能原因的想法。谢谢你的阅读。(请注意,先发邮件,如果我违反了任何协议,请道歉!)
更新:一个多星期后,这个bug还没有再次出现。我祈求好运,不过我真的需要大约一个月的时间来确定这是否能解决问题
更新:两周半后,仍然很好
希望最终更新:一个多月后,仍然很好。缓存似乎毕竟是个问题,耶 我和一位同事谈了我们在应用程序中如何解决这个问题 我们在应用程序关闭时保存了一些xml数据,看起来有时将文件写入磁盘的线程会被应用程序关闭过程杀死
我们将save命令从应用程序关闭移到数据更改时。这为我们解决了问题。我们也看到了这个错误;它主要发生在“现场”(我们注意到,当客户抱怨他们丢失了数据时)。你用的是哪个版本的.Net?实际上我试过了,但没有效果,这让我很惊讶。具体来说,我将shutdown save调用从应用程序退出事件移动到主启动屏幕的窗口关闭事件——应用程序的设置强制您通过这一个位置关闭。这是次优的,但在我的情况下正好有效。顺便说一句,它确实解决了另一个问题:在App_Exit中创建一个新窗口很少抛出错误。
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);