有人可以解释一下从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/

10-12 02:15