gpt4 book ai didi

.net - 间歇性 XmlSerializer(部分)空文件

转载 作者:行者123 更新时间:2023-12-01 06:40:00 25 4
gpt4 key购买 nike

我正在使用带有 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]

我自己从来没有能够复制它。它在序列化时不会产生任何错误,并且似乎只在程序关闭时发生。

相关问题:
  • here - 明显的修复,作家没有脸红;我正在使用 using调用 Dispose() 与 Close()
  • 相同
  • 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 帖子,如果我违反了任何协议(protocol),对不起!)

    更新:一个多星期后,该错误尚未再次出现。我的手指交叉,虽然我真的需要大约一个月才能合理确定地知道这是否解决了问题。

    更新:两周半后,仍然很好。

    希望最终更新:一个多月后,仍然很好。毕竟缓存似乎是个问题,耶!

    最佳答案

    我与一位同事讨论了我们为在应用程序中解决此问题所做的工作。

    我们在应用程序关闭时保存了一些 xml 数据,看起来有时将文件写入磁盘的线程被应用程序关闭进程杀死。

    我们将保存命令从应用程序关闭移到数据更改的时间。这为我们解决了问题。

    关于.net - 间歇性 XmlSerializer(部分)空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11622890/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com