【问题标题】:ServiceStack ProtoBuff Serialization to custom streamServiceStack ProtoBuff 序列化到自定义流
【发布时间】:2014-06-18 19:27:58
【问题描述】:

几天前,我发布了一个关于使用 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 吗?

非常感谢,

【问题讨论】:

    标签: servicestack protocol-buffers


    【解决方案1】:

    我讨厌自己发布答案,这意味着我首先没有足够的搜索

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

    1. [原合同]
    2. [ProtoMember(X)]
    3. [ProtoInclude(X,typeof(DerivingClass))]

    现在我学到了一些新东西:为什么不建议在 DTO 中进行类继承。

    我现在已经开始了,并且会努力让它对现实生活友好..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-12
      • 2013-01-01
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多