【问题标题】:why stll need to use Serializable attribute when the type already implements ISerializable? [duplicate]当类型已经实现 ISerializable 时,为什么还需要使用 Serializable 属性? [复制]
【发布时间】:2021-05-07 02:34:55
【问题描述】:

我知道[Serializable] 将类型标记为可序列化,ISerializable 使您可以通过实现GetObjectData 进行自定义序列化/反序列化,因此您可以看到如下代码:

[Serializable]
public class MyType : ISerializable {
   ...
   void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { ... }
}

我的问题是,当一个类型实现 ISerializable 时,它隐含地表明这个类型是“可序列化的”,因为逻辑是,如果你可以控制做你想做的事情,那么你是“有能力”的做这件事,所以我认为当一个类型实现ISerializable 时省略[Serializable]不是更好吗?

【问题讨论】:

  • 更多信息here,最终here
  • 旁注,在 2021 年你应该尽量避免两者。不要在新代码中使用它。

标签: c# .net


【解决方案1】:

是的,省略它! 使用 ISerializable,您可以通过 GetObjectData 覆盖定义自定义消毒行为。 对于字段上的单个属性,使用该属性更好。 这里有一个更详细的例子,每个使用这个自定义序列化的例子在 StackOverflow 上

【讨论】:

  • 但是我不能省略属性即使我实现了ISerializable接口,也会抛出异常
  • 抛出异常的原因是什么?
  • 如果我不使用[Serializable],就会抛出SerializationException,表示即使我实现了ISerializable,该类型也没有标记为可序列化
  • 嗯不确定他们
猜你喜欢
  • 2011-01-22
  • 1970-01-01
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
  • 2018-07-29
  • 2011-01-27
  • 2021-06-09
相关资源
最近更新 更多