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

c# - 解码 Google 安全浏览 v3 协议缓冲区

我正在尝试解码从 Google 的安全浏览 API 返回的协议缓冲区。

我正在使用 C#,但 Java 解决方案也可以工作,因为它或多或少是相同的。

我目前不完整的代码是这样的

我不确定要传递给 ChunkData.Parser.ParseFrom 什么

根据文档,结果应该以一个无符号的 32 位整数开头,所以我使用 var len = BitConverter.ToUInt32(newRes, 0) 来尝试获取这个数字。我以为这应该是块中的字节数,但是这个数字比整个字节数组大得多。

如何将正确的字节数组片段提供给 ChunkData 解析器?

0 投票
1 回答
697 浏览

c# - 在 proto3 中解析 RepeatedFields

一个简单的“Person”对象被解析为

如何解析 RepeatedField<>?

编辑:问题是是否可以通过线路发送 RepeatedFields 或者是否必须将它们捆绑在消息中才能传递?

0 投票
1 回答
979 浏览

c# - 如何将 protobuf 对象存储在 memcached 中?

以下是我用来创建从数据库/memcached 获取数据的 GRPC 系统的 proto 文件。

我创建了相应的 C# 类,详见GRPC Getting Started。我在服务器上使用这些类来存储数据库查询的结果并尝试将这些对象保存到 memcached。不幸的是,protobuf 对象没有被添加到 memcached 中。以下是我将它添加到 memcached 的方式,isKeyFirstTimeCreated当我尝试添加它时,它的值为 false。

根据 memcached 的要求,必须存储在 memcached 中的所有对象都必须是可序列化的。但是自动生成的 protobuf 类不可序列化(至少对于 c# 使用的二进制格式化程序)。现在,由于这些类是部分实现,我使它们可序列化,但这并没有帮助,因为 RepeatedField 不是可序列化的。

IMO,应该有更好的方法或某种机制可以让我将 protobuf 对象直接保存到 memcached 中,但不幸的是,谷歌搜索在这方面对我没有多大帮助。

我可以通过两种方式实现这一点

  • 通过将数据从 protobuf 对象复制到可序列化对象,然后将其保存到 memcached 中以供将来参考

  • 将数据复制到可序列化的对象中,并使用该对象填充 protobuf 对象。

但是这两个接近需要额外的工作。有没有更好的方法来实现这一目标?

[PS:我使用的是proto3,因此它支持c#]

0 投票
1 回答
836 浏览

nuget - 为什么 [在此处插入 Nuget 包] 不提取 dll

所以我接受缓存或其他东西在我身上发生了一些奇怪的事情。显然已经清空了缓存,删除了包文件夹并重新获得了包。

https://www.nuget.org/packages/Google.ProtocolBuffers/

重命名了 nupkg zip,查看并找到了 dll。他们只是没有提取 - 这表示 nuspec 对于其中的文件夹结构看起来是错误的。但是很难相信只有我有这个问题。

我以前从未有过这种行为,并且已经沉没了大约 2 个小时。所以希望有人能指出非常明显的问题并解释为什么我过去使用的一个包突然变得很糟糕。

编辑以获取更多信息:我在 vs2015 企业版中使用 4.6.1 控制台项目进行了复制(只是标准的 .net,而不是 dnx 或任何时髦的东西)。刚用 4.5.2 试过,我也有同样的问题。没有引用被添加到项目中的任何 dll。此外,在包文件夹中没有 dll - xml 文件虽然完成了它。但是,如果我进入 nupkg,重命名为 .zip 并打开,我可以看到它们应该在的 dll。我通常也以管理员身份运行 vs - 软件包安装也从命令行失败(并不是我期望有任何不同)

额外编辑:其他 nuget 包也在工作。我正在推进其他领域,这些领域也很重。只是这一个包给我​​带来了问题。

控制台登录安装包

文件夹结构(为了理智而删减)

0 投票
1 回答
284 浏览

c# - 在解析阶段验证和覆盖默认值

使用 3.0.0-beta3 版本的 C# 本机包,根据官方文档,默认值是在解析阶段分配的,无法区分是否根本没有传递值,就我而言,这是至关重要的一点,因为我想做一些对解码的原型实体进行验证,所以想知道是否有人对数据的自定义验证或以任何方式覆盖/拦截解析阶段有经验?

一些基本的例子:

  1. 对于 int32 字段,以防它根本没有通过,所以我想处理这种情况并引发自定义异常,而不是默认 0
  2. 对于 int32 字段,我想强制执行允许的值范围,如 100-1000 否则抛出解析异常
  3. 对于字符串字段,我想在解析/解码阶段强制执行最小长度

除了在 protobuf 包/API 之上编写自定义验证层之外,您如何建议这样做?我仍然希望有一个可扩展点但尚未找到

0 投票
2 回答
895 浏览

c# - ProtoGen.exe 启用服务生成

sample.proto

.cs在包管理器控制台中通过以下命令生成文件

结果sample.cs文件

试过了

  • ProtoGen.exe sample.proto -output_directory="C:\SomeDir" option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;在包管理器控制台中运行。以错误结束

术语“google.protobuf.csharp_file_options”未被识别为名称..

  • 加入。option service_generator_type = GENERIC;_ sample.proto以错误结束

无法解析符号

如何启用Services生成?

0 投票
1 回答
590 浏览

c# - 无法使用带有 Mono 的 C# 编译 Google Protobuf 2 消息

我正在使用 protobuf 和 c#,而c# 端口似乎是使用 proto2 生成 c# 类的答案。我能够从这篇 SO 帖子中找出 c# 端口是用 dotnet 2.0 构建的,并且我使用的是 mono latest,在撰写本文时是 4.4.x。我的命令是:

它产生

没有文件输出,并echo $?告诉我它以255.

有小费吗?谢谢!

0 投票
4 回答
672 浏览

c# - 是否可以将 Google Protocol Buffers 2.6.1 与 C# 一起使用?

我有一个项目,我使用 Google Protocol Buffers 2.6.1 大约两年了。我知道 Google Protocol Buffers 3.0.0 支持 C#,但我现在不想将我的协议迁移到更新的版本。我试图找到一种从我的 .proto 文件生成 C# 文件的方法,但没有成功。

是否可以将 Google Protocol Buffers 2.6.1 与 C# 一起使用?

0 投票
2 回答
3298 浏览

c# - 在 c# Visual Studio 中编译协议缓冲区 3 时间戳类型?

消息类型Quake

timestamp.proto包含在同一文件夹中

protoc 3.0.2命令行编译成功

但是 VS 右键单击​​ proto 文件并选择“运行自定义工具”失败,并出现错误“自定义工具 'ProtoBufTool' 失败。”

从 Visual Studio 中生成 C# 类?

0 投票
3 回答
24854 浏览

c# - 使用protobuf时如何将字符串转换为ByteString?

我想将一个字符串对象转换为 ByteString。我尝试使用 ByteString.CopyFrom() 函数进行转换,但返回值始终是“{Google.ProtocolBuffers.ByteString}”。为什么?我能怎么做?

我这样使用的功能。

结果