RuntimeTypeModel如何用于将ProtoInclude与protobuf-net中的类型相关联?

时间:2011-05-22 12:41:51

标签: .net protobuf-net

据我所知,RuntimeTypeModel允许将ProtoInclude与一个类型相关联,这对于无法更改类型声明的情况很有用。但我发现很难理解它是如何实际完成的。

有例子吗?

感谢。

1 个答案:

答案 0 :(得分:9)

AddSubType()用于指定派生类型及其标识符;例如(full code):

    static RuntimeTypeModel CreateModel() {
        var model = TypeModel.Create();
        model[typeof(NotInvolved)].Add(1, "D");
        model[typeof(SomeBase)]
            .Add(1, "A")
            .AddSubType(2, typeof(SomeDerived))
            .AddSubType(3, typeof(AnotherDerived));
        model[typeof(SomeDerived)].Add(1, "B");
        model[typeof(AnotherDerived)].Add(1, "C");
        model[typeof(AlsoNotInvolved)].Add(1, "E");
        return model;
    }

上面在运行时配置整个类型模型,但您也可以在自动(通过属性)和显式(通过代码)之间进行混合和匹配。