问题标签 [protobuf-csharp-port]

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 投票
5 回答
21083 浏览

java - 协议缓冲区和枚举组合?

这是我的原型文件:

在我的 C# 中,我试图:

但是 JAVA 告诉我:缺少 MsgCode(这是一个required

删除组合 -确实解决了

但我需要指定组合

问题

我该如何解决?

注意:

奇怪的是,如果我创建一个msg并设置多个 enums ,然后再次在 C# 中读取它 - 它确实有效......:-(

0 投票
0 回答
557 浏览

c# - 替代 Protobuf 的大小

我最近接受了一项任务,建议使用 Protobuf 序列化要写为 base64 字符串的对象。这将是 .NET 端口的 protobuf-net。存储此数据的先前方法是一系列位掩码,但已经过时,这是建议的路线。不幸的是,这种方法写出的数据对于我的目的来说太大了。

在代码中,我正在序列化的对象如下所示。我已经尝试过使用装饰过的 POCO 和 ProtoGen 生成的类。ProtoGen 生成的类实际上被序列化为优化程度较低的数据。

查看输出和大小随着列表长度的增长而增长的方式,我认为一些大小来自存储有关类类型的类型信息。我试图看看如何将这些对存储在并行数组中并使用“打包”,但是我没有看到尺寸上有太大的改进。也许是 10%-15%。就目前而言,这比以前的数据存储方法大一个数量级,但是由于我们的密钥空间用完了,旧方法将无法工作。

我的问题是,除了通过在旧方法中添加更多位来简单地扩大密钥空间之外,还有没有办法优化 Protobuf 的大小,我可能会丢失?或者也许是序列化针对大小优化的相当简单的对象的替代方法?

我还没有尝试过,但从我正在阅读的内容来看,即使对当前数据进行 GZipping 也只会带来边际改进。接下来我将把它作为一个选项。

示例类:

0 投票
1 回答
270 浏览

c# - 是否可以在 protobuf-csharp-port 中检测消息类型?

java客户端根据这个骨架构造一个消息:

此消息被发送到 C# 程序(服务器端)。

服务器知道如何读取字节(第一个字节是要读取的字节数,代表以下消息的大小)。

这就是由字节数组构造 MSG 的方式。

其中 buffer 是从套接字读取的字节数组。

但是现在我处于客户端需要发送“心跳”消息( 一条消息)以检查服务器是否处于活动状态的情况。(服务器应该响应:“是的,我还活着”

当然,我可以在MSG课程中添加另一个字段。但我不想这样做,因为MSG该类有很多不必要的字段 - 对于 Heartbeat 操作。

问题 :

服务器读取 n 个字节。无论如何我可以知道这是一条MSG消息还是“心跳”消息?

0 投票
1 回答
580 浏览

json - .Net 协议缓冲区到 JSON,JsonFormatReader 类不处理最外面的花括号?

我正在使用 Google 协议缓冲区,使用 protobuf-csharp-port 库(https://code.google.com/p/protobuf-csharp-port/)。Google.ProtocolBuffers.Serialization 类有一个JsonFormatReader/JsonFormatWriter类,当我使用它们时,它们不会将开始和结束的花括号放置到 JSON 文档中,如果我添加开始和结束大括号,它们也无法读取他们编写的相同文档。

所以例如调用

创建:

如果我尝试解析

使用

我得到以下信息:

为什么缺少 { },这是有效的 JSON 吗?

0 投票
1 回答
162 浏览

c# - 有没有办法将 protobuf-csharp-port 生成的类与 servicestack.ormlite 一起使用?

我有大量使用 protobuf-csharp-port 生成的 C# 类。我最终为他们创建了自己的简单 ORM 机制。

原来 OrmLite 正是我想要的。但我现在“卡住”了 protobuf 类。最大的问题是,对于每个实体,我有两个类:EntityClass(只读)和 EntityClass.Builder。

有没有办法集成 OrmLite 和 protobuf-csharp-port 类(及其构建器)?

0 投票
0 回答
1352 浏览

java - 为 C# 和 Java 编译 protobuf

对于 C# 文件的编译,我们所有的 .proto 文件都包含如下行:

我也想为 java 使用这些 proto 文件(我有必要的 java_package 选项集),但是如果我编译我会得到各种各样的错误。删除这个 csharp 东西可以很好地编译 Java。

无论如何我可以使用相同的文件为 C# 和 Java 编译吗?

使用 proto2、protoc 2.5 和 protobuf-java 2.5

编辑:这是一些 Java 编译错误:

EDIT2:构建过程只是一个运行这个的脚本:

EDIT3:这是一个简单的例子。这是我的目录结构:

csharp_options.proto 和描述符可以在这里找到

这是 Contact.proto 的内容:

执行 protoc 脚本后(参见编辑 2),它会创建以下内容:

目前我只是使用 Eclipse 进行编译。(还没有行家)。在 Eclipse 中,它报告以下编译器错误:

这是有问题的代码:

如您所见,它期望 CsharpOptions 存在,但事实并非如此。

0 投票
0 回答
72 浏览

c# - 如何跨 WCF 方法调用发送 Protobuf?

我已经.proto使用 protobuf-csharp-port 运行时编写并编译了一些文件,并且我试图返回一个作为对 WCF 方法调用的响应。这是我的服务:

但这会失败,并显示无用的“服务器未提供有意义的回复”错误消息。

对另一个问题的回答表明,这可能是序列化程序爆炸而不提供错误消息,所以我尝试将合同更改为string

这很好用,所以它一定与 Protobuf 有关。

我的假设是 WCF 由于某种原因无法序列化 Protobuf。我见过很多人在写[DataContract],但这似乎只与 相关protobuf-net,但我找不到任何关于 的信息protobuf-csharp-port,这似乎并没有以[DataContract]完全相同的方式使用。我尝试将-code_contractsProtogen 的选项设置为,true但这并不能解决任何问题(它甚至可能不相关)。

那么:如何从 WCF 方法调用中返回 Protobuf 对象?显然我可以手动反序列化 Protobufs,但这会变得乏味,所以我希望 WCF 为我做这件事。

请注意,我并不是想用 Protobuf替换WCF 序列化;我只想从 WCF 方法调用中返回一个 Protobuf 对象。

编辑#1:DataContractSerializer手动设置了一个并尝试序列化一个 Protobuf。我收到一个错误,上面写着Type 'Protobuf.LogEntry' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMember attribute.很明显,我不能这样做,因为代码是自动生成的。那么:如何使用 ProtoGen 或其他方式添加适当的属性?

0 投票
2 回答
17314 浏览

c# - 用于 C# 的 Google Protobuf 3.0.0 程序集

在我们的项目中,我们成功地将 Google Protobuf 用于 C++。现在需要编译相同的 *.proto 文件以在 C# 代码中使用它。我下载了最新的Protobuf 版本 3.0.0-alpha-3。它为 C# 提供了对 proto2 格式的支持,这对我来说已经足够了。我可以成功构建我的 *.proto 文件并获得一个 *.cs 文件。但是,当我将生成的 *.cs 文件添加到我的 C# 项目并尝试构建时,我收到如下编译器错误:"The type or namespace name 'Google' could not be found in the global namespace (are you missing an assembly reference?)"这是发生错误的地方:

现在我在项目页面上可用的发布 ZIP 中找不到任何 DLL 等,我可以将其作为参考包含在我的 C# 项目中。只有 protoc.exe 和一些 *.proto 文件在那里。我的简单问题是:我从哪里获得这些程序集?

(备注:我尝试按照自述文件中的说明从源代码构建项目protobuf-csharp-3.0.0-alpha-3,但未能使用“开箱即用”的 Visual Studio 2013 Update 4 构建它;我得到了许多编译器错误。)

0 投票
1 回答
62 浏览

c++ - 使用 C++ 检查并将数据添加到 protobuff

我想添加基于的数据HealthID;如果HealthID已输入,则程序不应添加新条目,而应仅增加现有条目的OccCount.

这段代码是正确的还是我应该转换HealthID成字符串?

生成的代码:

0 投票
1 回答
319 浏览

javascript - 如何在 Protobuf.js 中转换为十进制类型

我想用 和 中的窗口应用程序交换网站protobuf.net数据protobuf.js。我有一个protobuf.js没有十进制类型的问题。请帮我。