通常当我在做基于网络的工作时,我使用Protobuf来移动网络周围的自定义对象,这些对象是为正在构建的系统建模的,以便从其他系统移动我的数据/组合对象。
我目前正在参与增强一个使用基于专有文本的协议的项目,该协议主要使用文本将数据和实体空间的序列化(,|和[]表示法)作为数据访问层。
我要问的问题是我应该创建另一层对象,这些对象提供从Entityspaces对象的“load”数据填充的Protobuf网络对象,或者我应该将必要的protobuf标签添加到实体空间对象(它们从数据库中自动生成,目前没有)
答案 0 :(得分:0)
可以去任何一种方式。如果您需要将protobuf数据编码为文本格式:使用base-64,它不方便地使用|
/ [
/ ]
。
如果您更喜欢对当前未归属的对象进行protobuf编码,那么也有办法:如果数据库中的类型生成为partial
类,那么最简单的就是你可以做的(在另一个代码文件中):
namespace The.Same.Namespace {
[ProtoContract]
[ProtoPartialMember(1, "Foo")]
[ProtoPartialMember(2, "Bar")]
...
partial class SomeEntity {}
}
其中Foo
和Bar
是您要序列化的成员。或者,您可以在运行时配置整个模型:
RuntimeTypeModel.Default.Add(typeof(SomeEntity), false).Add("Foo", "Bar");
(这是一个非常基本的配置;有更多微妙的选项可用)