我的目标与本期github上所述完全相同:
如何读取现有的. proto文件并从中获取FileDescriptor
我不能使用建议的“变通方法”,原因有二:
根据Marc的说法,这是可能的,使用协议库:
如果没有编译的模式,您将需要一个运行时。原型解析器。[...] protobuf net包括一个(protobuf net.Reflection)
我找到了解析器。cs
谢谢你,马克,但是我该怎么用/怎么做呢?这是正确的入口吗?是否有一个最小的工作示例?
var set = new FileDescriptorSet(); set.Add("my.proto", true); set.Process();
这就是你所需要的;请注意,如果要提供实际内容(而不是让库进行文件访问),则有一个可选的TextReader
参数。如果需要导入:
set.AddImportPath(...);
调用进程
后,。文件
应与一起填充。每个文件的消息类型等。
更完整的例子:
var http = new HttpClient();
var proto = await http.GetStringAsync(
"https://raw.githubusercontent.com/protocolbuffers/protobuf/master/examples/addressbook.proto");
var fds = new FileDescriptorSet();
fds.Add("addressbook.proto", true, new StringReader(proto));
fds.Process();
var errors = fds.GetErrors();
Console.WriteLine($"Errors: {errors.Length}");
foreach(var file in fds.Files)
{
Console.WriteLine();
Console.WriteLine(file.Name);
foreach (var topLevelMessage in file.MessageTypes)
{
Console.WriteLine($"{topLevelMessage.Name} has {topLevelMessage.Fields.Count} fields");
}
}
哪些输出:
addressbook.proto
Person has 5 fields
AddressBook has 1 fields
google/protobuf/timestamp.proto
Timestamp has 2 fields
请注意,您不必提供
时间戳。proto
或其导入路径-库嵌入了许多常用导入,并使它们自动可用。
(每个文件都是一个
FileDescriptorProto
;逻辑解析操作中的文件组是FileDescriptorSet
——它是从descriptor.proto使用的根对象;请注意,如果需要编译/二进制模式,此图中的所有对象也是protobuf可序列化的)
问题内容: 有谁知道在Python中使用C头文件的好方法吗?例如,我有一个包含全局变量的C程序: 我希望能够采用C编译器/链接器生成的二进制文件,并使用Python脚本解析此结构(并可能对其进行修改)。 问题答案: 看一下用Python编写的C ++标头解析器 。您还可以使用以下任何一种工具编写自己的解析器: 剖析 层 勒普 还有更多…
问题内容: 我正在尝试动态解析Java中的给定.proto文件,以解码Protobuf编码的二进制文件。 我有以下解析方法,其中“ proto”字符串包含.proto文件的内容: 但是,执行时,先前的方法将引发消息“协议消息标签的电线类型无效”的异常。我使用了来自Google的示例.proto文件,因此我认为它是有效的:https : //github.com/google/protobuf/bl
问题内容: 您能否告诉我如何传递如下所示的JSON字符串: 我这样尝试过: 提前致谢 最好的祝福 问题答案: 请注意,您的JSON数据具有以下结构: 顶级值是具有单个属性(称为“课程”)的对象(字典) “教训”属性是一个数组 “课程”数组中的每个元素都是一个具有几个属性的对象(包含课程的字典),其中包括“眩晕” 相应的代码是: 一些观察: 在中,参数是指向指针的指针。在这种情况下,通常使用代替。如
问题内容: 我正在研究一个很长的Bash脚本。我想将CSV文件中的单元格读取到Bash变量中。我可以解析行和第一列,但不能解析其他任何列。到目前为止,这是我的代码: 它仅打印第一列。作为附加测试,我尝试了以下操作: $ y是空的。所以我尝试了: $ y是。为什么? 问题答案: 您需要使用而不是: 请注意,对于一般用途的CSV解析,您应该使用专门的工具,该工具可以处理带有内部逗号的带引号的字段,以及
问题内容: 如何在Python中解析YAML文件? 问题答案: 不依赖标头的最简单,最纯净的方法是(文档),可以通过以下方式安装: 就是这样。一个普通的函数也存在,但是除非你明确需要提供的任意对象序列化/反序列化,以避免引入执行任意代码的可能性,否则通常应首选该函数。
我有一个XML文件,如 我需要值,即“OEBPS/content.opf”文本。我尝试使用文档生成器和XML解析器,但没有结果。如何遍历该节点并获取值