使用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时随时运行反序列化过程。

使用DataContractSerialize保存文件时出现序列化错误

这是因为File.OpenWrite不会截断现有数据。您正在用较少的数据覆盖文件。最后的垃圾是原始文件中剩下的东西。我建议您使用File.Create(实际上是创建或覆盖-truncate),或显式指定truncate,或在写入前调用.SetLength(0)