问题标签 [protobuf-net]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2803 浏览

c# - 将原始序列化值添加到协议缓冲区中的重复字段(protobuf-net、protobuf-csharp)

我正在寻找一种将对象的序列化值 (byte[]) 添加到协议缓冲区消息中的重复字段的方法。

我有一个应用程序将数据项以序列化形式保存在 memcached 中,并且需要将它们传递给远程客户端。客户端通过提供密钥列表来请求数据项,服务器发回数据项列表。数据项的内容对服务器来说并不重要;它不需要知道其中包含什么,它只需要知道它们的密钥。

当前的方法是从 memcached 中获取项目,对其进行反序列化,将它们添加到响应中的数据项列表中,将响应序列化为字节数组并通过套接字发送。这不是最优的,因为我们反序列化数据项只是为了让它们在下一步中再次序列化。两种序列化(用于 memcached 和用于输出)都是使用协议缓冲区完成的。理想情况下,我们可以在从 memcached 获取数据后跳过反序列化,并将序列化的值添加到响应中。我查看了 protobuf-net 和 protobuf-csharp 并没有找到实现此目的的方法。是否可以?我忽略了什么吗?

以下是原型定义(简化):

0 投票
1 回答
1122 浏览

protobuf-net - protobuf-net 将集合合并到现有文件

我已经使用 protobuf-net 将集合序列化为文件。

我正在寻找一种将更多项目合并到现有文件的方法。

目前我有这个:

但它不起作用。有任何想法吗?

0 投票
1 回答
1016 浏览

protocol-buffers - Protobuf,如何在二进制文件中添加自定义版本详细信息

我想用我自己的版本号标记每个 protobuf 序列化数据。因此,如果需要,我可以检查用于序列化数据的版本。虽然 protobuf 是围绕想法设计的,所以你不需要检查版本。

为此,我可以使用与 .net 序列化中相同的方式在其中添加版本字段。

只是想确认这也是 protobuf 中的首选方式。

也应该像上面一样在protobuf-net中完成?在构造函数中分配版本,如果类变得不理想,它将被覆盖。对于要序列化的新对象,它将使用版本 1

0 投票
3 回答
1078 浏览

c# - protobuf-net 不适合哪些场景?

我们一直在 C# 应用程序中使用 BinarySerialization,但是需要序列化的类的大小和复杂性会导致序列化缓慢(反)序列化和大文件。

我们怀疑我们应该只编写自己的自定义序列化程序;但 protobuf-net 声称与标准 .Net 二进制序列化相比具有显着的速度和大小优势,并且可能比大量定制的序列化程序更容易添加到我们的应用程序中。

在花费大量时间和精力尝试让它为我们工作之前,我很想知道是否有任何交易破坏者。我们正在使用通过接口定义的属性、抽象子类的通用列表、自定义位标志枚举等等等。什么会阻止 protobuf-net 为我们工作?

0 投票
1 回答
2542 浏览

c# - protobuf-net 和接口支持

这个问题在很大程度上直接向 protobuf-net 维护者提出,但其他任何人请发表评论。

我试图序列化一个包含具有接口类型的属性的类,即:

我已经设法通过更改 protobuf-net 的 v1 的源来使其工作。只要为接口定义了 ProtoInclude,我就没有看到这种方法有任何问题。

很明显,要编译它,我必须允许在接口上装饰 ProtoContract 和 ProtoInclude,并在这里和那里进行一些其他更改。(注意,我会使用 DataContract/KnownType 但是这些属性也不能在接口上修饰)

你能评论一下可能的缺点吗?

0 投票
1 回答
802 浏览

c++-cli - protobuf-net 不反序列化 sbyte 数组

我在 C++/CLI 中定义了一个类,如下所示:

在调试时,我可以看到序列化程序从缓冲区属性中提取值,并且数据完好无损。当反序列化器运行时,我看到它将数据推送到缓冲区属性中,但是该数组填充了 0,而不是序列化之前存在的数据。我尝试在 ProtoMember 属性上设置 IsRequired = true ,但没​​有运气。

我有其他用 sbyte 数组定义的消息,这些消息可以很好地反序列化。但是,这些数组非常短(最多 10 个)。对我来说唯一突出的是这个数组的长度。帮助!:-)

编辑:我想我还应该提到我正在使用 v1 r282。

0 投票
1 回答
3060 浏览

protobuf-net - Protobuf-Net:如何序列化 guid?

是否有在 protobuf-net 中序列化 Guid 的首选方法?它似乎不是受支持的类型?

0 投票
1 回答
460 浏览

wcf - 任何人都在 net.msmq 上看到过 protobuf-net 的这个问题

我看到一个问题,我使用 protobuf-net 通过 wcf net.msmq 发送大消息并收到以下错误:

格式化程序在尝试反序列化消息时引发异常:反序列化操作“DeliverData”的请求消息正文时出错。预期来自命名空间“ http://mynamespace ”的结束元素“proto”

如果消息大小低于 16k,它可以工作

如果我删除 protobuf-net,它可以工作

如果我切换到basichttp,它可以工作

但是,如果消息大小超过 16k,使用 protobuf-net,通过 net.msmq,我会收到错误消息。我已将 maxBufferPoolSize 和 maxReceivedMessageSize 设置得足够大,但它没有帮助。

有没有其他人看过这个?有没有其他人使用 protobuf-net + net.msmq 处理大消息并让它工作?

0 投票
1 回答
642 浏览

c# - Protobuf-net r282 在反序列化使用 r249 序列化的对象时遇到问题

我刚刚从 r249 更新到 r282。除了替换 dll 我没有做任何改变。不幸的是,现在反序列化更新之前创建的对象需要更长的时间。过去需要两秒钟的时间现在需要五分钟。

版本之间是否有语法变化?有什么它不再支持的吗?

我的课程都在使用 ProtoContract、ProtoMember 和 ProtoInclude。我正在运行 VS2010。就我而言,我的协议缓冲区代码没有问题。我只是想升级,因为我认为拥有最新版本是件好事。

编辑 - 2010.09.09 我的对象的一个​​属性是一组 ushorts。我刚刚注意到这个属性没有用 r282 正确序列化/反序列化。数组的结果值全为零。该数组在序列化 (r282) 之前具有值,但在反序列化 (r282) 之后没有值。

0 投票
1 回答
787 浏览

silverlight - How do I use protobuf-net in Silverlight WCF generated service

I try to use protobuf-net in WCF/Silverlight application to improve large objects array serialization performance. I can serialize/deserialize classes (added Order=, etc) in the service code.

But when I try to apply ProtoBehavior, and call the protobuf-enabled service method from Silverlight, I get nulls instead of data (or errors).

I think this is because:

  1. ProtoBehavior is lost in Silverlight-generated service code;
  2. Domain classes (types) are not in the re-used assembly, they're regenerated on the client and Order= is lost.

However at present time I can't change both points. Is there a way to use protobuf-net without refactoring the (pretty big) project to have shared ASP.NET/Silverlight assembly with domain classes, etc?

I even think it will be easier to tweak Reference.cs to add missing behavior and Order= to appropriate members (via perl/regex script), if there's no other solution, but what exactly do I need to tweak, and will it work?