Je veux sérialiser des objets en chaînes de caractères, et inversement.
Nous utilisons protobuf-net pour transformer un objet en Stream et inversement, avec succès.
Cependant, Stream à la ficelle et retour... pas très réussi. Après être passé par StreamToString
y StringToStream
le nouveau Stream
n'est pas désérialisée par protobuf-net ; elle soulève un Arithmetic Operation resulted in an Overflow
exception. Si nous désérialisons le flux original, cela fonctionne.
Nos méthodes :
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);
}
Notre exemple de code utilise ces deux :
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);