【发布时间】:2012-02-04 17:26:43
【问题描述】:
我正在尝试通过 protobuf-net 发送一个 IPEndpoint,我观察到的是,当将 4 个字节的数组反序列化为 IP4 地址时,设置代码收到一个 8 个字节的值。四个字节包含原始地址,另外 4 个字节包含被序列化的地址。通过单步执行代码,我能够确认在调用 Deserialize 时,它首先读取字节,然后设置它们的字节。
在阅读了一些内容后,我了解了 OverwriteList,如下例所示,我已将其设置为 true。然而,setter 仍然提供了一个 8 字节的值。
有人知道我做错了什么吗?
当与 protobuf-net r480、Visual Studio 2010 作为 .Net 4.0 控制台应用程序一起使用时,此示例代码应引发异常。
使用 ProtoBuf; 使用 System.Net; 使用 System.IO; 命名空间 ConsoleApplication1 { [原合同] 类地址所有者 { 私有 IPEndPoint 端点; 公共地址所有者() {端点=新IPEndPoint(新IPAddress(新字节[] {8,8,8,8}),0); } 公共地址所有者(IPEndPoint 新端点) { this.endpoint = newendpoint; } [ProtoMember(1, OverwriteList=true)] 公共字节 [] 地址字节 { 获取 { 返回端点.Address.GetAddressBytes(); } 设置{端点.地址=新IP地址(值); } } } 课堂节目 { 静态无效主要(字符串 [] 参数) { AddressOWner ao = new AddressOWner(new IPEndPoint(new IPAddress(new byte[] { 192, 168, 1, 1 }), 80)); 内存流毫秒 = 新的内存流(); Serializer.Serialize(ms, ao); byte[] messageData = ms.GetBuffer(); ms = new MemoryStream(messageData); AddressOWner aoCopy = Serializer.Deserialize【问题讨论】:
标签: c# protobuf-net