System.NotSupportedException:尝试将类序列化为 xml 时

System.NotSupportedException When trying to serialize class to xml

提问人:Snail 提问时间:10/19/2023 最后编辑:Snail 更新时间:10/23/2023 访问量:62

问:

我正在尝试实现for类。当开始将类序列化为 xml 时,我抓住了 .当第二个序列化程序尝试在同一个序列化程序上调用方法时,会出现此问题。IXmlSerializationSerializableDictionarySystem.NotSupportedException: 'Can't flush final block twice'SerializeXmlWriter

例外

System.NotSupportedException
  HResult=0x80131515
  Message=Can't flush final block twice
  Source=Telerik.Windows.Zip
  StackTrace:
   at Telerik.Windows.Zip.OperationStream.FlushFinalBlock()
   at System.Xml.XmlUtf8RawTextWriter.Flush()
   at System.Xml.XmlWellFormedWriter.Flush()
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
   at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o)
   at MP.SharedToolbox.XmlInOut.SerializableDictionary`2.WriteXml(XmlWriter writer) in C:\Users\britikov\Documents\Projects\SharedToolbox\XmlInOut\SerializableDictionary.cs:line 69
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterRegulationItem.Write19_LoadCard(String n, String ns, LoadCard o, Boolean isNullable, Boolean needType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterRegulationItem.Write20_RegulationItem(String n, String ns, RegulationItem o, Boolean isNullable, Boolean needType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterRegulationItem.Write21_Regulation(Object o)

没有关于 InnerException 的信息。

UPD_0:我发现了一个问题。当我尝试将类序列化为存档中的 Stream of Entry 时出现问题。我正在使用Telerik.Windows.Zip创建存档并为其创建条目。我用额外的东西修复了它,我将把对象序列化到其中,然后我会把它复制到入口流中。但我不明白为什么进入流会出现问题,而没有。MemoryStreamMemoryStream

UPD_1我将所有源代码上传到github

有没有办法正确实现它?

C# XML 压缩 Telerik

评论

0赞 jdweng 10/19/2023
尝试以下操作:valueSerializer.Serialize(writer, this[key]。值);
0赞 Alexander Petrov 10/19/2023
我无法重现它。哪种特定类型用作?TValue
0赞 Snail 10/19/2023
@AlexanderPetrov使用了 for 和 forstringTValuebyteTkey
0赞 dbc 10/19/2023
1) 异常的完整输出是什么,包括异常类型、消息、回溯和内部异常(如果有)?2) 你能分享一个最小的可重现示例,包括代码吗?看起来您可能不止一次关闭或处置 zip 流,这导致了问题(即使它不应该)。ToString()XmlInOut<RegulationItem>.SaveToStream(entry.Open(), item)
1赞 JHBonarius 10/23/2023
只是一种预感,但它可能是库处置模式中的错误。因为流缓冲区在被释放时会被刷新。如果由于某种原因 dispose 被调用两次,或者缓冲区已被刷新,则如果未正确注册,则可能会导致错误。但是,就像说的,这只是一种预感。

答: 暂无答案