2012-02-04 83 views
6

我在做的是試圖通過protobuf-net發送一個IPEndpoint,我觀察到的是,當將4個字節的數組反序列化到IP4地址時,設置的代碼接收到的值爲8字節。四個字節包含orignal地址,另外4個字節包含序列化的地址。通過遍歷代碼,我已經能夠確認當Deserialize被調用時,它首先讀取字節,然後設置它們的字節。protobuf-net Byte Array上的OverwriteList

在做了一些閱讀之後,我瞭解了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); 
     } 
    } 
} 
+0

將檢查這個晚上 – 2012-02-04 18:48:15

回答

3

它看起來像這其實是一個錯誤,具體到byte[],這是作爲一個特定的protobuf原始的處理。其他數組/列表映射到repeated(以protobuf的形式),並正確處理OverwriteList選項。我將調整byte[]處理以支持此選項。

編輯:這是固定在r484,與之配套的integration test

+0

我試圖從源代碼編譯,我想我成功了,但我仍然創造了DLL有相同的行爲。有沒有什麼發佈計劃?我現在的工作是在屬性設置器中將正確的字節複製到新的數組中。 – 2012-02-05 02:58:49

+0

@William一旦我驗證了一些其他修復程序。 – 2012-02-05 09:04:12

+0

我正在使用Nuget中包含此錯誤的版本2.0.0.480。有一個新的軟件包可用,或者至少有某種解決方法是很好的。 – 2012-08-01 14:38:23

相關問題