ServiceStack ProtoBuff序列化到自定义流

时间:2014-06-18 19:27:59

标签: servicestack protocol-buffers

几天前,我发布了一个关于使用BinaryFormatter序列化ResponseStatus属性的问题。 Mythz指出它不是最快的方式,所以我决定转向另一个格式化程序。试过ProtoBuff和MsgPack,现在就在ProtoBuf上。

我真正的问题是:我试图了解Protobuf如何知道应该如何序列化ServiceStack Dto。我尝试将所有可能的属性添加到我现有的dto,ProtoContract和ProtoMember(0,1,2,3等),还有DataContract和DataMember。

最重要的是,我不使用ServiceStack自己的客户端,但尝试将请求序列化到现有流。

如果我不这样做:

ServiceStack.ProtoBuf.ProtoBufFormat.Model.Add (typeof(NameSpacePlaceholder.Service.Dto.GetNodes), false);

我收到有关无法传播的类型和合同的错误, 如果我确实添加了那段代码,那么一切都很好,但反序列化的对象是空的。

我用它来序列化:

ServiceStack.ProtoBuf.ProtoBufFormat.Model.Serialize (ms, myObject);

和反序列化:

ServiceStack.ProtoBuf.ProtoBufFormat.Model.Deserialize (ms, null, deserializationType);

我想我在这里遗漏了一些东西。它可能与名称空间有关吗?我查看了ServiceStack.ProtoBuff中的一些代码,它不是很难理解,但我无法理解。

现在我不清楚的事情:

  1. 是否需要在现有DTO中添加属性? (在ProtoBuf V2中我也可以在代码中执行,我读过,但是现在我也可以改变现有的DTO)
  2. 我是否需要在我的客户端(序列化)以及我的服务器(反序列化)中初始化请求(和响应)DTO
  3. 为什么我不应该序列化到我自己的Stream?
  4. 非常感谢,

1 个答案:

答案 0 :(得分:0)

我讨厌自己发布答案,这意味着我在第一时间没有足够的搜索

我了解到以下属性非常重要:

  1. [ProtoContract]
  2. [ProtoMember(X)]
  3. [ProtoInclude(X,typeof(DerivingClass))]
  4. 现在我学到了一些新东西:为什么DTO的继承不适合。

    我现在已经开始了,并且会努力使它真实友好..