在 protobuf-net 中,有没有办法指定 serializing/deserializing 给定类型时要使用的自定义方法?
In protobuf-net, is there a way to specify a custom method to be used when serializing/deserializing a given type?
在 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、...)
基本上没有。但是您可以 做的是编写第二个用于序列化的type(代理类型)。这种类型需要有两种类型之间的转换运算符(在任一类型上声明,通常是代理项),并注册到库中,例如:
RuntimeTypeModel.Default[typeof(Foo)].SetSurrogate(typeof(FooSurrogate));
库仍然控制着FooSurrogate
如何在线上写入。当前没有 API 允许您直接控制 inside 类型的输出。但是,如果您从 ProtoWriter
开始,您当然可以手动完成所有操作。
在 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、...)
基本上没有。但是您可以 做的是编写第二个用于序列化的type(代理类型)。这种类型需要有两种类型之间的转换运算符(在任一类型上声明,通常是代理项),并注册到库中,例如:
RuntimeTypeModel.Default[typeof(Foo)].SetSurrogate(typeof(FooSurrogate));
库仍然控制着FooSurrogate
如何在线上写入。当前没有 API 允许您直接控制 inside 类型的输出。但是,如果您从 ProtoWriter
开始,您当然可以手动完成所有操作。