繁体   English   中英

字节数组上的protobuf-net OverwriteList

[英]protobuf-net OverwriteList on Byte Array

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

在做了一些阅读后,我了解了OverwriteList,并且如下例所示,我已将其设置为true。 但是,设置器仍然提供8字节值。

有谁知道我做错了什么?

当与protobuf-net r480,Visual Studio 2010一起用作.Net 4.0控制台应用程序时,此示例代码应抛出异常。

using ProtoBuf;
using System.Net;
using System.IO;

namespace ConsoleApplication1
{

    [ProtoContract]
    class AddressOWner
    {
        private IPEndPoint endpoint;

        public AddressOWner() 
        { endpoint = new IPEndPoint(new IPAddress(new byte[] {8,8,8,8}), 0); }

        public AddressOWner(IPEndPoint newendpoint)
        { this.endpoint = newendpoint; }

        [ProtoMember(1, OverwriteList=true)]
        public byte[] AddressBytes
        {
            get { return endpoint.Address.GetAddressBytes(); }
            set { endpoint.Address = new IPAddress(value); }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            AddressOWner ao = new AddressOWner(new IPEndPoint(new IPAddress(new byte[] { 192, 168, 1, 1 }), 80));

            MemoryStream ms = new MemoryStream();
            Serializer.Serialize(ms, ao);
            byte[] messageData = ms.GetBuffer();
            ms = new MemoryStream(messageData);
            AddressOWner aoCopy = Serializer.Deserialize<AddressOWner>(ms);
        }
    }
}

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

编辑:这是在r484中修复的,带有支持集成测试

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM