C# 什么是;ApplyDefaultBehavior“;在RuntimeTypeModel.Add方法中?

C# 什么是;ApplyDefaultBehavior“;在RuntimeTypeModel.Add方法中?,c#,protobuf-net,C#,Protobuf Net,在protobuf网络中,protobuf.Meta.RuntimeTypeModel中的Add方法接受两个参数,一个是System.Type,一个是布尔值applydefaultbehavior——布尔值做什么?它是如何影响事物的?我什么时候需要传递它真/假 xml文档说: Whether to apply the inbuilt configuration patterns (via attributes etc), or just add the type with no addition

在protobuf网络中,
protobuf.Meta.RuntimeTypeModel
中的
Add
方法接受两个参数,一个是
System.Type
,一个是布尔值
applydefaultbehavior
——布尔值做什么?它是如何影响事物的?我什么时候需要传递它真/假

xml文档说:

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)
这还不足以让我理解,也许只是我


谢谢您的帮助。

如果您通过了
false
,protobuf net将不执行任何操作来配置类型。它不会查看属性,也不会查找通用模式。它将推断您希望自己完成所有这些工作,以构建一个自定义模型(可能是因为版本控制的原因,或者是因为类型不在您的控制范围内,并且具有使protobuf net混淆的属性)

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


继续评论:我强烈建议您只需切换到单独的DTO模型。序列化数据,而不是实现。当我听到“Unity3D类”时,我的默认答案是“这可能不是最好的选择

但作为手动配置的一个示例,如果
SomeType
(属于unity)无法序列化,这里有一个简便的技巧:

var metaType = model.Add(typeof(SomeType), false);
metaType.SetSurrogate(typeof(MyDTOThatLooksLikeSomeType));
其中,
MyDTOThatLooksLikeSomeType
是一个带有属性等的常规DTO,但是是网络友好的协议(只是常规序列化属性),加上它具有与
SomeType
之间的转换运算符。或者您可以手动执行以下操作:

var metaType = model.Add(typeof(SomeType), false).Add("Foo").Add(12, "Bar");
metaType.UseConstructor = false;

谢谢你的回答。所以,如果我没有一个类型,并且想将它添加到一个模型中,我必须通过false(这就是我想知道的,因为我试图在Unity3D中使用protobuf,当然我没有很多它的类…)-你能说一下如果我通过false,我必须做什么类型的配置吗?”这将推断出你想自己做所有这些。”“你能定义”所有这些吗“.谢谢.请原谅我的无知,但我对protobuf是新手。什么是DTO?你说让我做的不是叫做代理吗假设我想序列化
UnityEngine.Vector3
,我创建了自己的包装器/代理类,看起来像Vector3,包含protobuf所需的几乎所有注释,并在两者之间提供运算符重载。是吗?@vexe是的,代理将是一个DTO——我所说的“DTO”只是指“一个简单类型,其主要任务是传输数据,可能是为了序列化”。至于选择代理还是手动配置:这完全取决于
Vector3
的外观;p如果不能很好地发挥作用,那么代理可能是一种选择。另一个选项是创建一个不使用
Vector3