谁能解释一下从 ISerializable
继承的区别是什么?接口(interface)并将您的对象声明为 [Serializable]
?
我知道在第一种情况下您必须实现 ISerializable
接口(interface)成员,而在第二种情况下,这项工作很可能由 C# 本身完成。
但是对我来说没有意义的是以下行为:
public void Foo<T>() where T : ISerializable
{
// Whatever
}
现在,如果我有这样的类(class):
[Serializable]
public class Value
{
public String Value { get; set; }
}
不幸的是,我无法调用我的 X.Foo<Value>()
,因为编译器说:
There is no implicit reference conversion from 'Value' to 'System.Runtime.Serialization.ISerializable'
我很确定这是我对一些明显的事情的误解,所以请指出我做错了什么。
更新(重要:)
我如何制作 where T : ISerializable
声明与 [Serializable]
一起工作也上课?有办法吗?
如果提供的类型 T
,我想要实现的是编译时错误不可序列化(通过使用 [Serializable]
或 ISerializable
方式)。
显然,我当前的检查只处理第二种情况,那么如何让它处理这两种情况呢?
最佳答案
Serializable
只是您放置在类上的一个属性,让 SoapFormatter
等类知道(通过反射)它可以被序列化。用属性装饰类 不会 使类实现接口(interface),这就是编译器在您的情况下提示的原因。如果没有记错的话,如果想要更多地控制序列化过程,可以实现 ISerializable
。
关于c# - .NET 运行时序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4404420/