[英]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.