1

通常当我在做基于网络的工作时,我使用 Protobuf 在网络上移动自定义对象,这些对象是为正在构建的系统建模的,用于从其他系统移动我的数据/组合对象。

我目前正在参与增强一个项目,该项目使用基于专有文本的协议,该协议主要使用文本进行数据序列化(、| 和 [] 符号),并将实体空间用作数据访问层。

我要问的问题是我应该创建另一层对象来提供 Protobuf 网络对象,这些对象是从 Entityspaces 对象的“加载”数据中填充的,还是应该将必要的 protobuf 标签添加到 Entityspaces 对象中的对象(它们是从数据库中自动生成的,目前没有)

4

1 回答 1

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");

(这是一个非常基本的配置;还有更多微妙的选项可用)

于 2012-12-14T08:02:14.683 回答