【问题标题】:In protobuf-net, is there a way to specify a custom method to be used when serializing/deserializing a given type?在 protobuf-net 中,有没有办法指定在序列化/反序列化给定类型时要使用的自定义方法?
【发布时间】:2016-08-18 09:05:48
【问题描述】:

protobuf-net(Marc Gravell 实现)中,有没有办法指定每次 protobuf 遇到要序列化的类型时使用的自定义 Serializer/Deserializer?

类似的东西:

[ProtoContract]
class Foo 
{
    [ProtoMember(1), ProtoSerializer(BarSerializer)]
    public Bar Something { get; set; }
}

class BarSerializer
{
   public void Serialize(object value, Protowriter writer)
   {
       //do something here with writer...
   }
}

我查看了文档,但找不到任何东西。 我知道这可以直接使用Protowriter 来序列化一个对象(比如这个DataTable 示例)。

我想做的是仅对给定类型使用自定义序列化程序,并对已实现的其他类型使用默认实现(例如:int、string、...)

【问题讨论】:

    标签: serialization protocol-buffers protobuf-net


    【解决方案1】:

    不,基本上。但是您可以做的是编写第二个type(代理类型),用于序列化。这种类型需要有两种类型之间的转换操作符(声明在任何一种上,通常是代理),并注册到库中,例如:

    RuntimeTypeModel.Default[typeof(Foo)].SetSurrogate(typeof(FooSurrogate));
    

    库仍然控制FooSurrogate 在网络上的写入方式。目前还没有 API 可以让您直接控制类型的输出inside。但是如果你从ProtoWriter开始,你当然可以手动做所有事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多