2012-02-04 37 views
6

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); 
     } 
    } 
} 
+0

Sẽ kiểm tra tối nay –

Trả lời

3

Dường như đây thực sự là lỗi, cụ thể là byte[], được xử lý dưới dạng nguyên thủy protobuf cụ thể. Các mảng/danh sách khác được ánh xạ tới repeated (theo các điều khoản protobuf) và xử lý tùy chọn OverwriteList một cách chính xác. Tôi sẽ tinh chỉnh việc xử lý byte[] để hỗ trợ tùy chọn này.

Chỉnh sửa: đây là cố định trong r484, với hỗ trợ integration test

+0

Tôi cố gắng để xây dựng từ nguồn và tôi nghĩ rằng tôi đã thành công, nhưng tôi đã tạo dll vẫn có hành vi tương tự. Có lịch phát hành nào không? Công việc của tôi bây giờ là sao chép các byte phù hợp vào một mảng mới trong quá trình thiết lập thuộc tính. –

+0

@William ngay sau khi tôi xác thực một số bản sửa lỗi khác. –

+0

Tôi đang sử dụng phiên bản 2.0.0.480 từ Nuget chứa lỗi này. Nó sẽ là tuyệt vời để có một gói mới hơn có sẵn, hoặc ít nhất là một số loại workaround. –

Các vấn đề liên quan