我正在编写一些自定义通用数据结构。如何确保传入的泛型类型可以通过protobuf-net序列化?由于protobuf-net不依赖于接口,我不能以这种方式约束类型参数。我考虑过构造函数内部类型的运行时测试,但我甚至不能使用PrepareSerializer<T>
,因为它依赖于作为引用类型的类型。我可以简单地尝试序列化和反序列化,但这似乎充其量是混乱的。验证给定泛型类型的最佳方法是什么?可以序列化?
答案 0 :(得分:1)
XmlProtoSerializer必须做出类似的决定。例如:
static int GetKey(TypeModel model, ref Type type, out bool isList)
{
if (model != null && type != null)
{
int key = model.GetKey(ref type);
if (key >= 0)
{
isList = false;
return key;
}
Type itemType = TypeModel.GetListItemType(type);
if (itemType != null)
{
key = model.GetKey(ref itemType);
if (key >= 0)
{
isList = true;
return key;
}
}
}
isList = false;
return -1;
}
如果返回负值,则无法序列化。如果有帮助,我可以在更受支持的bool CanSerialize(Type)
中提供此功能吗?