C#接口编程,如何确保返回值是可序列化的

时间:2013-01-07 21:19:11

标签: c#

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

public T GetAStuff() where T is serializable

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

这可以实现吗?感谢。

2 个答案:

答案 0 :(得分:3)

不,因为那里没有“可序列化”的通用定义。它很大程度上取决于序列化器,许多要求都是基于属性的,不能表示为通用约束。

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

您最好的选择是在运行时检查您需要的特定T详细信息,或者更简单:只需确保您的单元/集成测试涵盖所需的所有方案。

答案 1 :(得分:1)

public interface IFoo
{
    T GetAStuff<T>() where T : ISerializable; // or what ever you need to constrain T to
}

-OR -

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

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