使用DataContractSerialize保存文件时出现序列化错误
本文关键字:序列化 错误 DataContractSerialize 保存文件 使用 | 更新日期: 2023-09-27 18:03:13
我使用这段代码序列化所需的对象(使用DataContractSerialier)
try { using (var stream = File.OpenWrite(filePath)) { var dcs = new DataContractSerializer(typeof(T)); dcs.WriteObject(stream, obj); } } catch (Exception ex) { throw new Exception("Error during write object to xml file", ex); }
我不明白,但有时这个方法附加到xml文件的末尾一些额外的符号。例如:"eInfo>"(当我删除'eInfo>'时,反序列化工作良好)。我在做高负载测试时发现了这一点(不间断地调用此方法12000次)。也许我可以检查文件是否正确保存(尝试反序列化保存的文件),但我认为这是坏主意,因为我们需要在保存xml-file时随时运行反序列化过程。
这是因为File.OpenWrite
不会截断现有数据。您正在用较少的数据覆盖文件。最后的垃圾是原始文件中剩下的东西。我建议您使用File.Create
(实际上是创建或覆盖-truncate),或显式指定truncate,或在写入前调用.SetLength(0)
。