1

一个简单的“Person”对象被解析为

            Person person = new Person
            {
                Id = 1,
                Name = "Foo",
                Email = "foo@bar",
                Phones = { new Person.Types.PhoneNumber { Number = "555-1212" } }
            };
            using (MemoryStream stream = new MemoryStream())
            {
                // Save the person to a stream
                person.WriteTo(stream);
                bytes = stream.ToArray();
            }
            Person copy = Person.Parser.ParseFrom(bytes);

如何解析 RepeatedField<>?

编辑:问题是是否可以通过线路发送 RepeatedFields 或者是否必须将它们捆绑在消息中才能传递?

4

1 回答 1

0

Person是一条消息,因此您可以读取和写入它的单个实例,如您的示例所示。是消息中repeated Person的一个字段,而不是消息本身。您无法读取/写入重复的字段,您必须一次读取/写入整条消息。(查看Python 实现,编码器似乎需要知道消息的长度才能正确编码,所以这是有道理的。)

但是,您描述的场景有几个替代方案:

  1. 您可以发送一堆单独的Person消息,并以您需要的任何方式在接收端将它们收集在一起。

  2. 您可以定义一条消息,我们称之为它People,包含一个字段repeated Person并编写该消息。在encoding 的文档中,他们注意到连接两个消息的字符串或调用该Message::MergeFrom方法都会连接消息中的重复字段。因此,您可以发送任意数量的People消息并在接收端连接或合并它们。这将为您提供People一条包含所有已发送消息的消息,而无需预先知道将发送Person多少条消息。Person

于 2016-01-27T14:51:56.490 回答