首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以挂接到protobuf-net序列化程序中以添加一些自定义逻辑?

是否可以挂接到protobuf-net序列化程序中以添加一些自定义逻辑?
EN

Stack Overflow用户
提问于 2012-08-30 06:53:44
回答 2查看 386关注 0票数 1

这可能有些夸大其词,但我正在尝试通过让两端都保留以前传输的URI的副本来减少客户机/服务器协议的网络消耗,以便在随后的聊天中使用2-4字节的占位符而不是完整的URI。

问题是,我认为通过传输的所有复杂对象进行反射以定位需要处理的URI将是相当昂贵的,而序列化程序已经在访问所有这些字段,并且可能使用比反射快得多的机制。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-30 15:07:50

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

代码语言:javascript
运行
复制
[ProtoMember(7, AsReference=true)]
public string Uri {get;set;}

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

如果这是在对Serialize/Deserialize的单独调用中进行的,则否:您必须手动执行此操作。我可以想出一些方法来做到这一点,但我认为在序列化层之外处理这一点会更好。

票数 2
EN

Stack Overflow用户

发布于 2012-08-30 09:49:40

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

如果是这样的话,您也许能够使用BeforeSerialization / AfterDeserialization来进行转换。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12187596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档