0

我希望我可以为我的界面做这样的事情

public T GetAStuff() where T is serializable

因此,我想保证实现者返回一个可序列化的输出

这可以实现吗?谢谢。

4

2 回答 2

3

不,因为那里没有“可序列化”的通用定义。它极大地依赖于序列化器,并且许多需求是基于属性的,不能表示为通用约束。

  • BinaryFormatter只需要[Serializable],或者可能ISerializable
  • XmlSerializer需要public和一个公共的无参数构造函数(这T : new()会有所帮助),并且是可选IXmlSerializable的(但是:它非常罕见,因为它很可怕)
  • DataContractSerializer可以使用XmlSerializersetup 或 use [DataContract],但不需要公共无参数构造函数
  • JSON.NET、protobuf-net 等可以使用一系列属性或运行时配置,并且可能使用或可能不使用构造函数

你最好的办法是T在运行时检查你需要的具体细节,或者更简单:只要确保你的单元/集成测试涵盖了它需要的所有场景。

于 2013-01-07T21:24:27.500 回答
1
public interface IFoo
{
    T GetAStuff<T>() where T : ISerializable; // or what ever you need to constrain T to
}

-或者-

public interface IFoo<T> where T : ISerializable
{
    T GetAStuff();
}

由于有许多不同的序列化选项,您可能无法限制类型。如果您只需要处理一个序列化选项,那么它可能是可能的。

于 2013-01-07T21:22:42.133 回答