2014-04-15 3 views
0

Я встречаюсь с исключением [System.Runtime.Serialization.SerializationException: завершение потока, встречающегося до разбора.] по де-сериализации string, пожалуйста, подскажите мне, что мне делать, чтобы исправить эту ошибку.Ошибка десериализации сжатой строки (завершение потока, встречающееся до разбора). C#

byte[] compressed; 

string content = "afjsklf lkjflfkldsflkfj fa fj lflkf lk kj lkj fldsjf lkflewru pjdslk jsdfi;j klnvmlvnetu iowu lknxvmln3-958u09v lsn"; 

var compMS = new MemoryStream(); 
using (var compressor = new GZipStream(compMS, CompressionMode.Compress)) 
{ 
    new BinaryFormatter().Serialize(compressor, content); 
    compressed = compMS.ToArray(); 
} 

var decompMS = new MemoryStream(compressed); 
using (var decompressor = new GZipStream(decompMS, CompressionMode.Decompress)) 
{ 
    BinaryFormatter bf = new BinaryFormatter(); 
    decompMS.Position = 0; 
    string result = (string)bf.Deserialize(decompMS); 

} 

Я также попытался использовать decompMS.Seek(0, SeekOrigin.Begin); но исключение все же есть.

http://dotnetfiddle.net/PF7egd

ответ

3

У вас есть 2 проблемы в вашем коде.

  • вы выполняете compMS.ToArray(), прежде чем закрыть компрессор (после первого с помощью блока) в декомпрессии
  • , вы пытаетесь десериализациями необработанных данных, а не распакованные данные

имеют взгляд на новую скрипку: http://dotnetfiddle.net/OryftE

или исправленный код здесь:

byte[] compressed; 

string content = "afjsklf lkjflfkldsflkfj fa fj lflkf lk kj lkj fldsjf lkflewru pjdslk jsdfi;j klnvmlvnetu iowu lknxvmln3-958u09v lsn"; 

var compMS = new MemoryStream(); 
using (var compressor = new GZipStream(compMS, CompressionMode.Compress)) 
{ 
    new BinaryFormatter().Serialize(compressor, content); 
} 

compressed = compMS.ToArray(); 

var decompMS = new MemoryStream(compressed); 
using (var decompressor = new GZipStream(decompMS, CompressionMode.Decompress)) 
{ 
    BinaryFormatter bf = new BinaryFormatter(); 
    decompMS.Position = 0; 
    string result = (string)bf.Deserialize(decompressor); 

} 

Надеюсь, что помогает.

С наилучшими пожеланиями, Chris

+0

Спасибо, это было полезно :) – ak1

+0

Вы долгожданная :) – Chris

Смежные вопросы