C# 在Protobuf net中,是否可以序列化未修饰的类?

C# 在Protobuf net中,是否可以序列化未修饰的类?,c#,protobuf-net,C#,Protobuf Net,要使用protobuf net序列化类,需要提供类和属性属性[ProtoContract]和[ProtoMember(n)]——其中n是1,2,3,…,等等 从克隆到类的镜像,是否可以序列化/反序列化我们无法控制的类 例如: 使用ProtoBuf Serializer.Serialize(OutputStream,异常) 或 Serializer.Serialize(OutputStream,dataWithPossibleException) 注意。假设数据有[ProtoContrac

要使用protobuf net序列化类,需要提供类和属性属性[ProtoContract]和[ProtoMember(n)]——其中n是1,2,3,…,等等

从克隆到类的镜像,是否可以序列化/反序列化我们无法控制的类

例如:

使用ProtoBuf

  • Serializer.Serialize(OutputStream,异常)

  • Serializer.Serialize(OutputStream,dataWithPossibleException)
注意。假设数据有[ProtoContract]/[ProtoMember],而其他数据没有

可能的办法:

  • 如果我们有像扩展方法一样工作的“扩展属性”,那就太好了。[不可能]
  • 本地复制类,然后在序列化/反序列化之前复制到/从对象中复制[这会起作用,但生产率会下降]
  • 为类生成外部原型文件/定义并将其存储在参考资料中?[有人知道怎么做吗?]

v2中有以下选项:

  • 您可以配置RuntimeTypeModel,告诉它类型和成员,而不需要任何属性
  • 对于不方便的类型,可以提供代理以简化序列化(它必须具有与原始类型之间的转换运算符)
  • 对于类型不是静态类型的API,有一个包含类型元数据的选项
现在,我认为其中的一些内容解决了你的一些观点。如果您可以完全指定一个有问题的场景,我可能会更具体一些(或者考虑新的方法来折磨代码以使其工作)


但要回答标题问题(非装饰):是的,在v2中

感谢您预见到这一需求!我现在选择了代理选项,因为我反编译了微小的框架类并将它们放在我的程序集中。大多数情况下,我都会坚持POCO,所以像这样一次性的也没什么大不了的。我将查看新的版本2选项。@sgtz SetSurrogate方法应使其更直接和方便。顺便说一句:我有一个版本稍旧的v2。所以,我点击了svn上的更新,现在我可以序列化/反序列化了。此外,我还必须删除并读取protobuf-net二进制文件。不知道那是怎么回事,但它现在运行得很好。谢谢你把这个项目公之于众。。。还有,多亏了谷歌。我应该提到,在这一点上,我仍然在使用我的Tuple副本,而不是系统名称空间中的副本。