【问题标题】:Using .proto files in vb.net在 vb.net 中使用 .proto 文件
【发布时间】:2018-03-08 15:20:46
【问题描述】:

我正在尝试掌握 protobuf-net,因为我相信这是帮助我反序列化 protobuf 创建的文件的正确工具。我已设法找到与相关文件相关的 .proto 文件,因此我相信我拥有处理该文件所需的所有原始信息。这是我的问题:

protobuf-net github page 说你必须像这样装饰你的类:

[ProtoContract]
class Person {
    [ProtoMember(1)]
    public int Id {get;set;}
    [ProtoMember(2)]
    public string Name {get;set;}
    [ProtoMember(3)]
    public Address Address {get;set;}
}
[ProtoContract]
class Address {
    [ProtoMember(1)]
    public string Line1 {get;set;}
    [ProtoMember(2)]
    public string Line2 {get;set;}
}

我的问题是,我是否需要从找到的每个 .proto 文件在我的项目中创建一个新类,并逐行将它们转换为上述格式?有没有办法可以引用 .proto 文件?

【问题讨论】:

    标签: vb.net protocol-buffers protobuf-net


    【解决方案1】:

    编辑:protogen 的 VB.NET 工具已经实现,现在可以通过 protobuf-net 在https://protogen.marcgravell.com 获得;命令行工具尚未更新,但会在接下来的几天内更新(代码相同,只是发布方式不同)。


    protobuf-net 有一个 .proto 代码生成工具。 with r668 发布的 protogen 版本包括 VB.NET 支持,但不是最新的“proto3”和各种其他 protobuf 概念。在 protobuf-net 2.3 中,protogen 工具被完全重写为完全托管并包含现代 .proto 概念,但是:虽然 API 是语言可扩展的,但我没有实现VB.NET 生成器,主要是因为我不是编写惯用 VB.NET 代码的可靠智慧来源。

    如果你想实现一个 VB.NET 生成器,实际上它不会做太多工作,我很乐意接受 PR。

    【讨论】:

    • @FraserOfSmeg 正确;图书馆不知道也不关心您使用的是什么语言 - 它只是查看元数据。
    • @FraserOfSmeg 如果我有时间,我会看看我是否可以对现有代码进行 VB 化;我对它是一个怪物有点谨慎,但我会试一试......
    • @FraserOfSmeg 哦,我的意图是它基本上是defaultPath = defaultPath?.Replace("#FILE#", nameWithoutExtension).Replace('#DIR#', finalFolderName) - 这正是允许的;我会看看我以后能不能破解它
    • @FraserOfSmeg 所以 1.0.5 是“向上”;以下对我有用,并在一个项目中编译 所有 VB,并且零错误或警告:protogen --proto_path=c:\code\SteamKit\Resources\Protobufs --vb_out=c:\code\protogen\vb **/*.proto --package=#DIR#.#FILE# +names=original - 请注意,+names=original 只需要 一个文件 - tf_beta 之一;如果您想要更漂亮的 VB 外壳(matchgroupmatch_group - 25 与 41 IIRC),您也可以重命名 .proto 中的一个字段(protobuf 不太关心名称)。
    • 有效!所有文件成功导入!感谢您对此提供的所有帮助,如果您需要进行任何类型的测试,请告诉我:) 现在让我弄清楚我在用数据做什么!
    猜你喜欢
    • 2014-06-24
    • 2014-02-03
    • 1970-01-01
    • 2017-05-23
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多