在protobuf-net中,是否有一种方法可以指定在序列化/反序列化给定类型时使用的自定义方法?

时间:2016-08-18 09:05:49

标签: serialization protocol-buffers protobuf-net

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,...)

1 个答案:

答案 0 :(得分:4)

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

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

该库仍然控制着FooSurrogate在线上的写法。目前没有一个API允许您直接控制内部类型的输出。但是如果你从ProtoWriter开始,你当然可以手动完成所有事情。