问题标签 [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 投票
3 回答
10466 浏览

c# - protobuf-net:序列化一个空列表

我们在序列化一个空列表时遇到了一些问题。这里有一些使用 CF 2.0 的 .NET 代码

当我们尝试在流上写入时出现异常(bytes.length 超出范围)。但是一个空 List 的类型不应该是 0 字节,对吧(类型信息?)?

我们需要这种类型的发送,因为在响应中是来自服务器的消息给我们的客户端。

0 投票
1 回答
1019 浏览

c# - protobuf-net 不反序列化 0

我在 C# 中使用 protobuf-net r278,我只是注意到,如果我有一个带有int字段的类,如果该字段的值设置为 0,则该字段不会正确反序列化。也就是说,当反序列化时,它的默认值来自类定义。示例类:

然后运行这段代码:

当我这样做时,deserField1 = -1Field2 = 2,而不是 0。我在这里做错了吗?

0 投票
1 回答
2550 浏览

c# - protobuf-net - 在 C++ 端反序列化的问题:(

我在我的 .NET 应用程序中使用 ProtoBuf-Net 来序列化以下内容:(以 .proto 格式)

我的目标是将其序列化并将其作为单个样本注入 ASF 文件。

我称之为序列化:

然后我从 ms 对象中得到一个字节数组:

我把这个字节数组放在 ASF 中。最大的问题是我的 C++ 应用程序可以很好地读取 ASF 示例,当我尝试反序列化它时遇到内存访问冲突:(

这是我的 C++ 代码:

(其中 m_screenBuffer 是 ProtoScreenBuffer,serBuffer 是我从 ASF 文件中得到的原始字节数组,dwInputDataLen 是它的长度。)

对于我正在尝试做的事情,我在这里做的任何事情都是错误的吗(在 C# .NET 中序列化并在 C++ 中反序列化?)

非常感谢。

罗伊

0 投票
1 回答
2275 浏览

c# - 使用 protobuf-net 反序列化当前流位置的类型

我将几个对象序列化为一个流,但是当我尝试将它们读回时,除了最后一个对象之外,我似乎什么也得不到:

第一个反序列化将流移动到末尾,postA2 包含 postB1 的值,而 postB2 只是一个未初始化的实例。这是预期的行为吗?如果是,如何从流中的随机位置反序列化对象?

0 投票
2 回答
368 浏览

c# - 带有共享类的 WCF 错误服务错误消息

源代码: http ://code.google.com/p/sevenupdate/source/browse/#hg/Source/SevenUpdate.Base

SevenUpdate.Base.Sui 无法使用,因为它与导入的 DataContract 不匹配。需要从引用类型中排除此类型。

现在我尝试取消选中重用引用类型,并且我能够编译我的项目。但是当从客户端发送一个集合时,它从未被接收到或无法在服务器端反序列化。

我真的需要这个工作。任何帮助将不胜感激,完整的源代码由谷歌代码提供。

0 投票
5 回答
24106 浏览

c# - 如何在 protobuf-csharp-port 和 protobuf-net 之间进行选择

我最近不得不寻找最初由 Google 开发的 Protocol Buffers 库的 C# 移植。猜猜看,我在这里发现了两个非常知名的人拥有的两个项目:由Jon Skeet编写的protobuf-csharp-port和由Marc Gravell编写的protobuf-net。我的问题很简单:我必须选择哪一个?

我非常喜欢 Marc 的解决方案,因为在我看来它更接近 C# 哲学(例如,您可以只向现有类的属性添加属性),并且它看起来可以支持 .NET 内置类型,例如 System.Guid。

我相信他们两个都是非常棒的项目,但你有什么意见?

0 投票
1 回答
1271 浏览

c# - protobuf-net - 反引号、字典和 .proto 文件

我正在尝试使用http://code.google.com/p/metasyntactic/wiki/ProtocolBuffers与使用来自 iphone 的 protobuf-net 的 C# 程序交谈

不幸的是,我得到的 .proto 文件(从 C# 源代码生成)包含 protoc 拒绝的一行:

这似乎是因为源数据是一个 C# 字典,其中一个 Guid 键和一个类作为值。有没有办法更好地应对这种情况?

使用的 protobuf-net 版本是 r278.zip。

(C# 发送和接收这些 protobuf 都可以正常工作,只是当我们将 iphone 添加到组合中时,这成为一个问题。)

更新:感谢 Marc,现在一切正常!

C#端的对象原来是:

在.proto中使用以下内容效果很好:

有问题的消息包含:

0 投票
2 回答
980 浏览

protobuf-net - protobuf-net 生成的二进制文件是否与 Google 规范兼容

实际上我想使用 Google 的 java 实现序列化我的数据,然后使用 C# 实现反序列化?
我选择了 protobuf-net,因为它似乎更稳定(proto# 仍然是 v0.9,否则我会选择它)。在我开始研究它之前,我想确保我可以实现这一点(使用 java 实现序列化数据并使用 protobuf-net 反序列化它)。或者是否有任何特定于 protobuf-net 实现的方法列表?

0 投票
1 回答
2143 浏览

c# - protobuf-net:反序列化 Guid 属性的线型异常不正确

我在使用 protobuf-net 反序列化 ORM 生成的实体的某些 Guid 属性时遇到问题。

这是代码的简化示例(再现了场景的大部分元素,但没有再现行为;我无法公开我们的内部实体,因此我正在寻找解释异常的线索)。假设我有一个类,Account有一个AccountID只读 guid 和一个AccountName读写字符串。我序列化并立即反序列化一个克隆。

反序列化在反序列化时会引发Incorrect wire-type deserializing Guid异常。

这是示例用法...

这是一个示例 ORM'd 类(简化,但演示了我能想到的相关语义)。使用 shell 游戏通过暴露支持字段来反序列化只读属性(“不能写”本质上变成“不应该写”,但我们可以扫描代码以获取分配给这些字段的实例,因此该 hack 适用于我们的目的)。

同样,这不会重现异常行为;我正在寻找可能的线索:

XML、JSON 和 DataContract 序列化器似乎都可以很好地序列化/反序列化这些对象图,因此属性排列基本上可以工作。我已经尝试过使用列表与单个实例、不同前缀样式等的 protobuf-net,但在反序列化时仍然总是得到“不正确的线型 ... Guid”异常。

所以具体的问题是,是否有任何已知的解释/解决方法?我不知道是什么情况(在实际代码中但不是示例中)可能导致它。

我们希望不必直接在实体层创建 protobuf 依赖;如果是这种情况,我们可能会创建代理 DTO 实体,其中所有公共属性都具有 protobuf 属性。(这是我对所有声明性序列化模型的主观问题;这是一种普遍存在的模式,我理解它为什么会出现,但是 IMO,如果我们可以将一个人送上月球,那么“正常”应该是拥有对象和序列化合同解耦。;-) )

谢谢!

0 投票
1 回答
309 浏览

protobuf-net - 自定义工具错误:Command.proto:11:18: "Message2" is not defined

我正在使用最新版本的 protobuf-net 与 VS2008 集成。我在 1 个原型文件中创建了 2 条消息(Message1 和 Message2),1 条消息。当我尝试在 Message1 中引用 Message2 时,代码生成器工具给我错误“Message2”未定义并且不会生成代码文件。两条消息的包是相同的。
看起来是这样的,因为该工具与 VS2008 集成,它希望编译同一 .proto 文件中的所有消息。目前我必须在 Message1.proto 文件中粘贴一条同名的空消息,如下所示:

然后稍后删除class Message2from的声明Message1.cs。是否需要进行任何设置以避免此错误,或者提供空声明是唯一的方法?或者如果没有,那么我建议你(Marc Gravell)包含一个像“extern”这样的关键字来告诉编译器这种类型的定义在另一个类中可用