此方法接受一个整数作为最后一个参数,但我不确定我是否理解我将使用它的确切目的。
Serializer.SerializeWithLengthPrefix(stream, object, PrefixStyle.Base128, [tag]);
对应的Deserialize方法也是如此。
它只是一种标记消息以在反序列化上添加某种“查询”功能以过滤掉不需要的消息的方法,还是有任何其他用途?
最佳答案
基本上,它是一个额外的标记,可以(尽管不是必须)用于记录添加的消息的“类型”,因为假设(当使用 *WithLengthPrefix 方法时) ) 是同一个流中有多个消息。
被包含在内,还意味着整个复合流本身是一个完全有效的 protobuf 消息。
使用方法:
List<Foo> ,然后重复反序列化(使用长度前缀)单个 Foo 项,反之亦然Serializer.NonGeneric API 允许基于标签的类型解析,即代码等效于“if 1 then Invoice; if 2 then Order, if 3 then skip it, if 4然后是 Customer”,等等 - 如果使用 NetworkStream 作为消息发送设备,这尤其有用。这种方法(每种类型使用不同的标签)允许您从流中读取对象,并正确反序列化它们,而无需事先知道下一条消息的类型如果你愿意,可以省略它 - 只需传递零 (IIRC)。这将(通常)为每个附加的消息保存一个字节,但是:这意味着流本身不再是有效的 protobuf。读的时候传零,当然还是可以读的。
关于c# - 什么是 protobuf-net SerializeWithLengthPrefix 标记参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8601647/