protobuf-net OverwriteList on Byte Array

本文关键字:Array Byte on OverwriteList protobuf-net | 更新日期: 2023-09-27 18:22:23

我正在做的是尝试通过protobuf net发送一个IPEndpoint,我观察到的是,当将4个字节的数组反序列化为IP4地址时,集合代码收到的值为8个字节。包含原始地址的四个字节,以及包含序列化地址的另外四个字节。通过逐步执行代码,我已经能够确认,当调用Deserialize时,它首先读取字节,然后设置字节。

在阅读了一些之后,我了解了OverwriteList,正如下面的例子所示,我已经将其设置为true。然而,仍然为setter提供了一个8字节的值。

有人知道我做错了什么吗?

当与protobuf net r480、Visual Studio 2010作为.net 4.0控制台应用程序一起使用时,此示例代码应该引发异常。

使用ProtoBuf;使用System.Net;使用System.IO;命名空间控制台应用程序1{【协议】类AddressOWner{私有IPEndPoint端点;公共地址OWner(){endpoint=new IPEndPoint(new IPAddress(new byte[]{8,8,8}),0);}public AddressOWner(IPEndPoint newendpoint){this.endpoint=newendpoint;}[ProtoMember(1,OverwriteList=true)]public byte[]AddressBytes{get{return endpoint.Address.GetAddressBytes();}设置{endpoint.Address=新的IPAddress(值);}}}班级计划{static void Main(string[]args){AddressOWner ao=新AddressOWner(新IPEndPoint(新IPAddress(新字节[]{192168,1,1}),80));MemoryStream ms=新MemoryStream();序列化程序。序列化(ms,ao);byte[]messageData=ms.GetBuffer();ms=新内存流(messageData);AddressOWner aoCopy=序列化程序。反序列化<AddressOWner>(ms);}}}

protobuf-net OverwriteList on Byte Array

看起来这实际上是一个特定于byte[]的bug,它被作为一个特定的protobuf原语处理。其他数组/列表映射到repeated(在protobuf术语中),并正确处理OverwriteList选项。我将调整byte[]处理以支持此选项。

编辑:这在r484中得到了修复,支持集成测试