【发布时间】:2019-12-09 05:27:27
【问题描述】:
我正在尝试将 proto 文件转换为 HTTP 请求负载的二进制文件,但是,我收到来自 protoc 编译器工具的错误,返回类型未定义。我找不到与 --encode= 一起使用的类型定义的任何文档。
我尝试在 --encode 中指定不同的类型,但我发现的信息无关紧要。我尝试从 .proto 文件 ``` message DeviceAuthRequest { }
中指定 proto 消息的其他事情protoc --encode=projname.auth TEST.proto > TEST.bin
Type not defined: projname.auth
protoc --encode=DeviceAuthRequest TEST.proto > TEST.bin
--encode 和--decode 的实际类型是什么?我有 C# 中的源代码和编译代码。寻找一种在 proto 文件中使用修改后的数据制作有效负载的方法。
【问题讨论】:
-
我很困惑......你说你有 C#......你不能使用 C# 生成的代码加载(反序列化)数据,将数据更改为对象 /i>,然后再序列化一下?
-
比起修改生成的 C# 代码,我更喜欢使用 protoc 文件,因为我需要在多个 .proto 文件中频繁更改参数。
protoc --encode=[package].[message] test.proto > test.bin我能够在没有消息类型错误的情况下执行 protoc,但是,在执行时,protoc cli 会挂起而不会生成二进制文件。 -
但您只是想更改 数据 对吗?您根本不需要修改生成的文件;你只需要写大约 3 行反序列化、变异和序列化;我误解了这个问题吗?
-
没错,这是修改实际数据的问题,以确保根据原始文件将格式正确的有效负载发送到 API。我只能访问接受 protobuf 消息的 API,而不是发送消息的客户端应用程序,因此我将生成自己的数据并相应地对其进行变异。
-
我正在尝试以下仍然给我解析错误,不完全确定我的格式有什么问题。接收以下内容:输入:1:12:预期标识符,得到:“”5eb94f9c-ee3e-476a-ada9-4a84cf72ff28“”。解析输入失败。`
protoc --encode packagetest.demo demo.proto < demo.txt > demo.binDemoIds: {"5eb94f9c-ee3e-476a-ada9-4a84cf72ff28"} SentTimeUtc: "2019-10-18T17:15:00Z" ContextId: 123123123原型演示文件message demo { repeated UserGuid DemoIds = 1; google.protobufTimestamp SentTimeUtc = 2; int32 ContextId = 3}
标签: protobuf-net protoc