java - 原始缓冲区到 XML

标签 java protocol-buffers

我想将我的 Google 协议(protocol)对象转换为 XML 格式。我想保留一些字段作为属性。 而不是:

<field>
    <name>ApiFieldHeaderName</name>
    <maxLength>50</maxLength>
</field>

我想要以下内容:

<field name="ApiFieldHeaderName" maxLength="50" ></field>

我的协议(protocol)是

string name = 1;
int32 maxLength = 2;

然后我浏览了一些论坛并使用了 xml_disposition

[(xml_disposition) = ATTRIBUTE]

但是,我收到错误:

Option "(xml_disposition)" unknown.

我使用的是proto3,语言是Java。

syntax = "proto3";
option optimize_for = SPEED;

最佳答案

我相信您已经从 2009 年 protobuf 新闻组的边讨论中找到了 xml_disposition。不过,提到的选项纯粹是假设的。据我所知:不存在这样的 xml_disposition 自定义选项 - 至少不是标准选项 - 并且没有代码生成器寻找它。 Google protobuf 源代码中没有提及 xml_disposition,并且当前版本的 protoc (3.5.1) 无法识别它和内置选项。

所以:

  • 是的,可以在 .proto 中添加自定义扩展,您可以使用它来注释字段(等)
  • 是的,您可以编写自己的代码生成工具来检查这些自定义选项,并生成额外的生成代码来实现您想要的内容
  • 但默认情况下这些都不会发货

旁注:自定义选项必须在“proto2”语法文件中定义,但“proto3”文件仍然可以从“proto2”文件导入和使用这些自定义选项。

关于java - 原始缓冲区到 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48821485/

相关文章:

python - Protobuf 不序列化默认值

java - 是否可以在 Eclipse 中显示图像直方图

java - 是否热衷于让 jackson 在 Spring Boot REST API 中按需使用 snake_case/camelCase?

java - 如何将 google-api-services-datastore-protobuf 与 SBT 或 Maven 一起使用?

java - 使用构建器时映射到蛇盒

c# - protobuf 网络 : how to represent DateTime in C#?

java - 哪些类(class)成员应该有保护修饰符?

java - 在 Java 和 C++ 应用程序中使用 protobuf 进行解析时出错

c++ - 如何将包含嵌入空值的 Google Protocol Buffer SerializeAsString() 输出分配给 std::string?

java - gRPC - 找不到方法