【问题标题】:Use protobuf to serialize a list of list of string使用 protobuf 序列化字符串列表
【发布时间】:2023-02-10 03:44:04
【问题描述】:

我正在开发一个打字稿项目,我想在其中使用 protobuff 序列化 RequestBody。

我的身体是这样的:

{
  "streams": [
    {
      "stream": {
        "a": "1",
        "b": "2",
        "c": "3",
        "d": "4",
        "e": "5",
        "f": "6",
        "g": "7"
      },
      "values": [
        [
          "1675947803118000000",
          "logfmt"
        ]
      ]
    }
  ]
}

我可以在流中拥有多个流的地方。

我设法序列化了除 values 键之外的所有内容。

我不知道如何定义没有字段名称的字符串列表。

我尝试了很多事情都没有成功:

 Stream stream = 1;
 //repeated string values = 2;// Concat timestamp and log line: "1675947803118000000,logfmt"
 //repeated google.protobuf.Any values = 2; //values: [ Any {} ]
 //repeated Values values = 2; // values: [ Values { a: [] } ],
 // repeated MyMessage values = 2; // values: [ MyMessage { some_identifier: [] } ],
 repeated MyFields values = 2; // values: [ MyFields { MyMap: {} } ],

我确实在 protobuf 文档或其他任何地方找到了有关此问题的资源。

有人可以提供指导吗?

谢谢任何建议。

问候

昆汀

【问题讨论】:

    标签: typescript serialization protocol-buffers


    【解决方案1】:

    你不能。

    Protobuf 不允许将 values 定义为:

    message Foo {
      repeated repeated string values = 1;
    }
    

    repeated 只允许采用标量类型或Message

    Protobuf 中的“等价物”是:

    message Bar {
      repeated string values = 1;
    }
    message Foo {
      repeated Bar bars = 1;
    }
    

    在这种情况下,您的在线格式必须(通常应该始终)不同于应用程序格式。在封送处理之前,您需要将 RequestBody 映射到等效的 Protobuf 消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 2023-03-23
      • 2021-01-08
      相关资源
      最近更新 更多