c# - .NET 运行时序列化

标签 c# serialization interface

谁能解释一下从 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/

相关文章:

java - PECS 不适用于具有接口(interface)的返回类型

java - IntelliJ IDEA 'class' 或 'interface' 预期

c# - 如何在 C# 中检查日期是否超过 1 年前?

java - 具有对象类型的 Jackson JSON 列表

javascript - NestJs:如何使 Body 输入形状与实体的 DTO 不同?

asp.net-mvc-4 - 将枚举发布到 MVC4 Controller

java - 文本用户界面,无法使用方法

c# - 是否有与 Apache Hadoop 等效的 .NET?

c# - 遍历excel表中特定列号的所有行并对每一行值做一些处理

c# - 检查属性是否存在于 C# Expando 类中