gpt4 book ai didi

c# - 字节数组上的 protobuf-net OverwriteList

转载 作者:太空狗 更新时间:2023-10-29 21:51:34 25 4
gpt4 key购买 nike

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

在阅读了一些资料后,我了解了 OverwriteList,正如在下面的示例中所见,我已将其设置为 true。然而,setter 仍然提供一个 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[],它被作为特定的 protobuf 原语处理。其他数组/列表映射到 repeated(在 protobuf 术语中),并正确处理 OverwriteList 选项。我将调整 byte[] 处理以支持此选项。

编辑:这已在 r484 中修复,支持 integration test

关于c# - 字节数组上的 protobuf-net OverwriteList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9142819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com