什么是" applyDefaultBehaviour"在RuntimeTypeModel.Add方法中做什么?

时间:2014-05-28 12:43:28

标签: c# protobuf-net

在protobuf-net中,Add中的ProtoBuf.Meta.RuntimeTypeModel方法有两个参数,一个System.Type和一个布尔applyDefaultBehaviour - 布尔值有什么作用?它如何影响事物?我什么时候需要传递真/假?

xml doc说:

Whether to apply the inbuilt configuration patterns (via attributes etc), or
just add the type with no additional configuration (the type must then be manually configured)

这对我来说还不够理解,也许只是我...

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

如果您通过false,那么protobuf-net将执行 nothing 来配置该类型。它不会看属性,它不会寻找常见的模式。它会推断您想要自己完成所有这些,构建一个自定义模型(可能是出于版本控制的原因,或者因为类型超出了您的控制范围,并且具有混淆protobuf-net的属性)。

基本上,除非你知道自己在做什么,否则通过true; p


继续评论:我强烈建议您只需交换到单独的DTO模型。序列化数据,而不是实现。只要我听到" Unity3D课程",我的默认值是" 可能不是最好的选择。

但是作为手动配置的一个例子,如果SomeType(属于统一)无法序列化,这是一个方便的技巧:

var metaType = model.Add(typeof(SomeType), false);
metaType.SetSurrogate(typeof(MyDTOThatLooksLikeSomeType));

其中MyDTOThatLooksLikeSomeType是具有属性等的常规DTO,但 protobuf-net friendly(只是常规序列化属性),还有转换运算符到/来自{{1} }。或者你可以手动做事:

SomeType