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

发布于 2024-12-13 22:19:07 字数 228 浏览 0 评论 0原文

我正在编写一些自定义通用数据结构。如何确保传入的泛型类型可以被protobuf-net序列化?由于 protobuf-net 不依赖于接口,因此我无法以这种方式限制类型参数。我考虑过对构造函数内的类型进行运行时测试,但我什至无法使用 PrepareSerializer 因为这依赖于该类型是引用类型。我可以简单地尝试序列化和反序列化,但这充其量看起来很混乱。验证给定泛型类型可以序列化的最佳方法是什么?

I am writing some custom generic data structures. How can I ensure that the generic type passed in can be serialized by protobuf-net? Since protobuf-net doesn't rely on interfaces, I can't constrain the type parameter in that way. I thought about runtime testing of the type inside the constructor, but I can't even use PrepareSerializer<T> because that relies on the type being a reference type. I could simply attempting a serialization and deserialization, but this seems messy at best. What's the best way to verify the a given generic type can be serialized?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

够运 2024-12-20 22:19:07

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) 中提供此功能,如果这会有帮助的话?

XmlProtoSerializer has to make a similar determination. For example:

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;
}

If that returns a negative value it can't be serialised. I could make this available in a more supported bool CanSerialize(Type) if that would be helpful?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文