Serializer.PrepareSerializer 和 RuntTimeTypeModel.CompileInPlace 有什么区别

What is the difference between Serializer.PrepareSerializer and RuntTimeTypeModel.CompileInPlace

请纠正我,在我看来 Serializer.PrepareSerializer 和 RuntTimeTypeModel.CompileInPlace 做同样的事情?

从字面上看,它们同一件事:

在通用 Serializer API 中我们有:

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

和非泛型 Serializer API:

    /// <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中只有一个"model"(即一组运行时配置数据),而且只有一个编译机制。在 v2 中,这扩展了一些 - 所以 v1 API 现在只在 default "model".

上调用 CompileInPlace

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