在Protobuf-net中,是否可以序列化非装饰类?

时间:2011-06-25 13:17:53

标签: c# protobuf-net

要使用protobuf-net对类进行序列化,您需要提供类和属性属性[ProtoContract]和[ProtoMember(n)] - 其中n是1,2,3,...等

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

例如:

使用ProtoBuf;

  • Serializer.Serialize< Exception>(OutputStream,exception);

  • Serializer.Serialize< Tuple< Data,Exception>>(OutputStream,dataWithPossibleException);

NB。说Data有[ProtoContract] / [ProtoMember]而其他人没有。

可能的方法:

  • 如果我们有像扩展方法一样工作的“扩展属性”,那就太好了。 [不可能]
  • 在本地复制该类,然后在序列化/反序列化之前复制到对象或从对象复制[这样可行,但效率会下降]
  • 为类生成外部proto文件/定义并将其存储在资源中? [有谁知道如何解决这个问题?]

1 个答案:

答案 0 :(得分:3)

这里有v2中的选项:

  • 您可以配置RuntimeTypeModel,告诉它不需要任何属性的类型和成员
  • 对于笨拙的类型,可以提供代理以使序列化更容易(它必须具有转换操作符到/来自原始类型)
  • 对于类型不是静态类型的API,可以选择包含类型元数据

现在,我认为其中一些可以解决你的一些观点。如果你可以完全指定一个有问题的场景,我可能会更具体(或想到折磨代码的新方法,使它工作)。

但要回答标题问题(未装饰):是的,在第2版