Eu quero serializar objetos em strings e voltar.
Usamos o protobuf-net para transformar um objeto em um fluxo e retornar com êxito.
No entanto, transmitir para string e voltar ... não é tão bem-sucedido. Depois de passar por StreamToString
e StringToStream
, o novo Stream
não é desserializado pelo protobuf-net; isso gera uma Arithmetic Operation resulted in an Overflow
exceção. Se desserializarmos o fluxo original, ele funcionará.
Nossos métodos:
public static string StreamToString(Stream stream)
{
stream.Position = 0;
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
return reader.ReadToEnd();
}
}
public static Stream StringToStream(string src)
{
byte[] byteArray = Encoding.UTF8.GetBytes(src);
return new MemoryStream(byteArray);
}
Nosso exemplo de código usando estes dois:
MemoryStream stream = new MemoryStream();
Serializer.Serialize<SuperExample>(stream, test);
stream.Position = 0;
string strout = StreamToString(stream);
MemoryStream result = (MemoryStream)StringToStream(strout);
var other = Serializer.Deserialize<SuperExample>(result);