Những gì tôi đang cố gắng gửi IPEndpoint qua protobuf-net và những gì tôi quan sát được là khi deserializing mảng 4 byte vào địa chỉ IP4, mã thiết lập nhận giá trị là 8 byte. Bốn byte chứa địa chỉ orignal và 4 byte khác chứa địa chỉ đã được tuần tự hóa. Bằng cách bước qua mã tôi đã có thể xác nhận rằng khi Deserialize được gọi, nó lần đầu tiên đọc các byte, và sau đó đặt chúng byte.Overotobuf-net OverwriteList trên Byte Array
Sau khi thực hiện một số đọc, tôi đã tìm hiểu về OverwriteList, và như có thể thấy trong ví dụ bên dưới, tôi đã đặt nó thành true. Tuy nhiên setter vẫn được cung cấp một giá trị 8 byte.
Có ai có đầu mối về những gì tôi đang làm sai không?
Mã mẫu này sẽ ném một ngoại lệ khi được sử dụng với roto80 protobuf-net, Visual Studio 2010 dưới dạng ứng dụng bảng điều khiển .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); } } }
Sẽ kiểm tra tối nay –