有人可以解释一下从ISerializable
接口(interface)继承和将您的对象声明为[Serializable]
有什么区别吗?
我知道在第一种情况下,您必须实现ISerializable
接口(interface)成员,而在第二种情况下,这项工作很可能由C#本身完成。
但是,对我而言,以下行为是没有意义的:
public void Foo<T>() where T : ISerializable
{
// Whatever
}
现在,如果我有这样的课:
[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/