【问题标题】:Class with [Serializable] attribute refuse to serialize具有 [Serializable] 属性的类拒绝序列化
【发布时间】:2017-08-22 14:22:49
【问题描述】:

我的班级用 [Serializable] 属性装饰。我正在创建该类的对象并添加到数据表中。当我使用 BinarySerializer 序列化数据表时,出现错误

Type 没有实现 IXmlSerializable 接口,因此不能 继续序列化。

这里是示例代码

[Serializable]
class PropertyData
{
  // Properties
}

class Main
{
  PropertyData obj = new PropertyData();

  dttable.Rows.Add(val1,val2,val3, obj);

  // ...

  ObjbinaryFormatter.Serialize(stream, dttable); // throws exception

}

请提出解决方案。

【问题讨论】:

  • 也许你应该创建一个DataSet,将RemotingFormat 属性设置为SerializationFormat.Binary,添加DataTable 并序列化DataSet
  • 你能发布一个可编译的例子吗?小细节很重要,你忽略了太多。您是否尝试序列化 PropertyData 中的一些 unusual 类型?
  • 展示如何创建 BinaryFormatter 和 DataTable 对象。
  • 为了增加我们能够给出有意义答案的机会,我们需要查看 minimal reproducible example,或者至少查看包含异常类型的异常的完整 ToString() 输出,消息、回溯和内部异常(如果有)。例如,BinarySerializer 是什么?这实际上是BinaryFormatter 吗?如果是BinaryFormatter,见blogs.msdn.microsoft.com/jaredpar/2009/03/31/is-it-serializable

标签: c# serialization


【解决方案1】:

BinaryFormatter 期望 [Serializable] 属性没问题,但异常似乎不是来自 BinaryFormatter,而是来自 XmlSerializer。问题似乎是该课程不是公开的。但是,您的代码不清楚,因为您似乎正在序列化 DataTable。尝试将您的 DataTable 存储在 DataSet 中,然后将其序列化。

如需快速参考,请查看.NET Serializers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 2014-02-18
    相关资源
    最近更新 更多