是否可以挂钩protobuf-net序列化器来添加一些自定义逻辑?

时间:2012-08-29 22:53:44

标签: serialization protobuf-net

这可能有点过分,但我试图减少客户端/服务器协议的网络消耗,让双方都保留以前传输的URI的副本,以便使用2-4个字节的占位符而不是完整的URI随后的喋喋不休。

问题是我认为反映所有传输的复杂对象来定位需要处理的URI会非常昂贵,而序列化程序已经访问了所有这些字段,并且可能使用比反射更快的机制。

这可以在protobuf-net中完成吗?

2 个答案:

答案 0 :(得分:2)

如果这是对Serialize / Deserialize的一次调用的一部分(即您的数据在多个位置重复相同的uri),那么您可以已经执行此操作 ,只需告诉它将这些字符串视为引用(它具有字符串的特殊处理,因此相同字符串内容的两个不同引用计为相等):

[ProtoMember(7, AsReference=true)]
public string Uri {get;set;}

在序列化过程中,第一次发现 字符串值(用AsReference=true修饰)时,它将生成一个唯一的标记来表示字符串;该相同字符串的所有后续用法将序列化该令牌。

如果这是对Serialize / Deserialize的单独调用,则为no:您必须手动执行此操作。我可以想一些这样做的方法,但我认为这样可以更好地处理序列化层的

答案 1 :(得分:1)

您是否可以自定义要使用Tokenise URI的对象,并让它们继承或实现一个接口,您可以检查该特定对象是否为Tokenizer。

如果是这种情况,您可以使用BeforeSerialization / AfterDeserialization进行转换。