是否可以将Protobuf-Net与没有无参数构造函数的类一起使用?

Sté*_*écy 10 .net c# serialization protocol-buffers protobuf-net

使用Protobuf-Net,我发现如果没有无参数构造函数或者我可能会遗漏某些东西,似乎不可能反序列化一个类?

我不想要一些带有无参数构造函数的类.我可以使用某种属性或其他技术吗?

Shu*_*oUk 13

protobuf-net目前依赖于无参数构造函数.

但是,该构造函数不需要是公共的(如果需要调用它将使用反射),因此您可以定义所需的私有构造函数,仅供protobuf-net使用(添加注释以解释原因)并处理特定的序列化相关问题.

这使得api的其余部分无法构建"非法"实例.

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