.NET 2.x Ошибка при десериализации - C#

Узнай цену своей работы

Формулировка задачи:

Привожу код сериализации и отправки объекта:
Листинг программы
  1. public void SendRezult(object rezult)
  2. {
  3. using (MemoryStream reader =new MemoryStream())
  4. {
  5. BinaryFormatter bf = new BinaryFormatter();
  6. bf.Serialize(reader, rezult);
  7. long send = 0L, length = reader.Length;
  8. _client.Send(BitConverter.GetBytes(length));
  9. byte[] buffer = new byte[BufferSize];
  10. int read, sent;
  11. reader.Position = 0;
  12. while ((read = reader.Read(buffer, 0, BufferSize)) != 0)
  13. {
  14. sent = 0;
  15. while ((sent += _client.Send(buffer, sent, read, SocketFlags.None)) < read)
  16. {
  17. send += (long)sent;
  18. //Console.WriteLine (" Sent + send + " " /" + length + "."); / / progress
  19. }
  20. }
  21. }
  22.  
  23. }
И приема с дессериализацией:
Листинг программы
  1. public object ReceiveAnswer()
  2. {
  3.  
  4. byte[] receivedBuffer = null;
  5. byte[] buffer = new byte[BufferSize];
  6. _client.Receive(buffer);
  7. long receive = 0L, length = BitConverter.ToInt64 (buffer, 0);
  8.  
  9. int received;
  10. while (receive < length)
  11. {
  12. received = _client.Receive (buffer);
  13. receivedBuffer = ConcatenateArrays(receivedBuffer, buffer);
  14. receive += (long) received;
  15. }
  16. MemoryStream ms = new MemoryStream(receivedBuffer);
  17. ms.Position = 0;
  18. return (object)new BinaryFormatter().Deserialize(ms);
  19.  
  20. }
  21. //Ниже привожу код с помощью которого конкатинирую масссивы, хотя
  22. //врятли сдесь трабла
  23. byte[] ConcatenateArrays(byte[] Arr1, byte[] Arr2)
  24. {
  25. if (Arr1 == null&&Arr2!=null) return Arr2;
  26. else
  27. if (Arr2 == null) return Arr1;
  28. else
  29. {
  30. byte[] Rezult = new byte[Arr1.Length + Arr2.Length];
  31. Arr1.CopyTo(Rezult, 0);
  32. Arr2.CopyTo(Rezult, Arr1.Length);
  33. return Rezult;
  34. }
  35.  
  36. }
ошибка постоянно появляется на последней строчке ( на строчке return-a) Код ошибки: Двоичный поток "170" не содержит допустимого двоичного заголовка BinaryHeader. Возможные причины: недопустимый поток или изменение версии объекта между сериализацией и десериализацией. При чем при нажатии continue в дебаг меню, цифра 175 меняется на 165, 165 на 124, а после еще одного continue такая ошибка вылазит: Недопустимый двоичный формат входного потока. Начало содержимого (в байтах): 94-AA-7A-9F-22-62-B5-71-E3-46-72-F6-60-3B-B9-78-6E ...

Решение задачи: «.NET 2.x Ошибка при десериализации»

textual
Листинг программы
  1. public T ReceiveAnswer<T>()
  2.         {
  3.             var buffer = new byte[BufferSize];
  4.             _client.Receive(buffer);
  5.             long receive = 0L, length = BitConverter.ToInt64(buffer, 0);
  6.  
  7.             byte[] receivedBuffer = new byte[length];
  8.             using (var mrs = new MemoryStream(receivedBuffer))
  9.             {
  10.                 while (receive < length)
  11.                 {
  12.                     int received = _client.Receive(buffer);
  13.                     mrs.Write(buffer, 0, received);
  14.                     receive += received;
  15.                 }
  16.                 mrs.Seek(0, SeekOrigin.Begin);
  17.                 return (T)new BinaryFormatter().Deserialize(mrs);
  18.             }
  19.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы