c#接口编程,如何保证返回值是可序列化的
本文关键字:序列化 返回值 何保证 接口 编程 | 更新日期: 2023-09-27 17:51:04
我希望我可以为我的界面做一些这样的事情
public T GetAStuff() where T is serializable
因此,我希望保证实现程序返回可序列化的输出
这能实现吗?谢谢。
没有,因为那里没有"可序列化"的通用定义。它很大程度上依赖于序列化器,并且许多需求是基于属性的,这不能表示为通用约束。
-
BinaryFormatter
只需要[Serializable]
,或者ISerializable
-
XmlSerializer
需要public
和一个公共无参数的构造函数(所以T : new()
会有帮助),和可选的IXmlSerializable
(但是:这是非常罕见的,因为它是可怕的) -
DataContractSerializer
可以使用XmlSerializer
设置,或者使用[DataContract]
,但不需要公共无参数构造函数 - JSON。. NET、protobuf-net等可以使用一系列属性或运行时配置,并且可以或不可以使用构造函数
你最好的办法是在运行时检查你需要的特定T
细节,或者更简单:只要确保你的单元/集成测试涵盖了它需要的所有场景。
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();
}
由于有许多不同的序列化选项,您可能无法限制类型。如果您只需要处理一个序列化选项,那么这是可能的。