Я пытаюсь отправить IPEndpoint через protobuf-net, и я заметил, что при десериализации массива из 4 байтов в IP4-адрес установленный код получает значение 8 байтов.Четыре байта, содержащие адрес оригинала, и еще 4 байта, содержащие адрес, который был сериализован.Проходя по коду, я смог подтвердить, что когда вызывается Deserialize, он сначала читает байты, а затем устанавливает их байты.
После некоторого чтения я узнал о OverwriteList, и, как видно изВ приведенном ниже примере я установил значение true.Однако для установщика все еще предоставляется 8-байтовое значение.
Кто-нибудь знает, что я делаю неправильно?
Этот пример кода должен вызывать исключение при использовании с protobuf-net r480, VisualStudio 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);
}
}
}