首页 > 解决方案 > Serializer.PrepareSerializer 和 RuntTimeTypeModel.CompileInPlace 有什么区别

问题描述

请纠正我,对我来说这听起来像 Serializer.PrepareSerializer 和 RuntTimeTypeModel.CompileInPlace 做同样的事情?

标签: protobuf-net

解决方案


它们实际上同一件事:

在通用SerializerAPI 中,我们有:

    /// <summary>
    /// Precompiles the serializer for a given type.
    /// </summary>
    public static void PrepareSerializer<T>()
    {
        NonGeneric.PrepareSerializer(typeof(T));
    }

在非通用SerializerAPI 中:

    /// <summary>
    /// Precompiles the serializer for a given type.
    /// </summary>
    public static void PrepareSerializer(Type t)
    {
#if FEAT_COMPILER
        RuntimeTypeModel model = RuntimeTypeModel.Default;
        model[model.MapType(t)].CompileInPlace();
#endif
    }

这里的主要区别在于这PrepareSerializer是一个 v1 API,而在 v1 中只有一个“模型”(即一组运行时配置数据),并且只有一个编译机制。在 v2 中,这扩展了一些 - 所以 v1 API 现在只调用默认CompileInPlace的“模型”。

MapType是不相关的东西,与一些不再存在的代码相关联;MapType已在未合并的分支中完全删除)


推荐阅读