如何最好地判断protobuf-net是否可以序列化泛型类型参数?

时间:2011-11-06 05:05:24

标签: generics protobuf-net

我正在编写一些自定义通用数据结构。如何确保传入的泛型类型可以通过protobuf-net序列化?由于protobuf-net不依赖于接口,我不能以这种方式约束类型参数。我考虑过构造函数内部类型的运行时测试,但我甚至不能使用PrepareSerializer<T>,因为它依赖于作为引用类型的类型。我可以简单地尝试序列化和反序列化,但这似乎充其量是混乱的。验证给定泛型类型的最佳方法是什么?可以序列化?

1 个答案:

答案 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)中提供此功能吗?