我在做的是試圖通過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); } } }
將檢查這個晚上 – 2012-02-04 18:48:15