【发布时间】: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 中查看了一些代码,它并不难理解,但我无法让它继续下去。
我现在不清楚的事情:
- 是否需要将属性添加到现有 DTO 中? (在 ProtoBuf V2 中我也可以在代码中完成,我读过,但现在我也可以更改现有的 DTO)
- 我是否需要在我的客户端(序列化)以及我的服务器(反序列化)中初始化请求(和响应)DTO
- 有什么原因我不应该序列化到我自己的 Stream 吗?
非常感谢,
【问题讨论】:
标签: servicestack protocol-buffers