Lo que estoy haciendo es intentar enviar un IPEndpoint a través de protobuf-net y lo que observé es que al deserializar la matriz de 4 bytes en la dirección IP4, el código establecido recibe un valor de 8 bytes. Cuatro bytes que contienen la dirección original y 4 bytes más que contienen la dirección serializada. Al recorrer el código, he podido confirmar que cuando se llama a Deserialize, primero lee los bytes y luego establece los bytes.protobuf-net OverwriteList en Byte Array
Después de leer algo, aprendí sobre OverwriteList, y como se puede ver en el ejemplo a continuación, lo he configurado como verdadero. Sin embargo, al setter todavía se le proporciona un valor de 8 bytes.
¿Alguien tiene una idea de lo que estoy haciendo mal?
Este código de ejemplo debe lanzar una excepción cuando se usa con protobuf-net r480, Visual Studio 2010 como una aplicación de consola .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); } } }
Comprobará esta tarde –