2009-08-26 67 views

回答

13

protobuf-net目前依赖于具有无参数构造函数的工作。

但是这个构造函数不需要是公共的(it will use reflection if need be to invoke it),所以你可以定义所需的私有构造函数以供protobuf-net使用(添加一个关于为什么的注释)并处理那里的特定序列化相关问题。

这使得您的api的其余部分无法构建“非法”实例。

Marc指出,如果你在谈论最外层的消息对象,你也可以自己创建对象并调用Serializer.Merge。但是如果它需要创建一个对象(因为它目前有一个空实例,或者对于列表/数组中的新项目),那么它会查找默认的构造函数。

+0

何时调用无参数构造函数?其他字段更新之前? – mcmillab 2014-11-17 08:16:59

4

ShuggyCoUk使用无参数构造函数是正确的。

尽管如此 - 如果您正在讨论最外层的消息对象,您也可以自己创建对象并致电Serializer.Merge。但是如果它需要创建一个对象(因为它当前有一个null实例,或者对于列表/数组中的新项目),那么它会查找默认构造函数。

,我还可以提供的一些属性标记说“只是通过FormatterServices创建一个原始对象”,但这种感觉不必要的(带私人参数的构造函数相比),并且可能无法在所有平台上工作(Silverlight,CF等 - 可能存在问题)。

+0

我猜这是你已经做了什么('FormatterServices')与SkipConstructor选项,这些天可用? – DeCaf 2016-04-15 07:47:25

+0

@DeCaf是的,就是这样 – 2016-04-15 12:04:54

相关问题