繁体   English   中英

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

[英]Is it possible to use Protobuf-Net with a class without a parameterless constructor?

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

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

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

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

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

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

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

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

我也可以在属性中提供一些标记来说“只需通过FormatterServices创建一个原始对象”,但这感觉不必要(与私有无参数构造函数相比),并且可能不适用于所有平台(Silverlight,CF等) - 可能是问题)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM