객체를 문자열로 다시 직렬화하고 싶습니다.
우리는 protobuf-net을 사용하여 객체를 스트림으로 변환하고 성공적으로 되돌립니다.
그러나 Stream to string and back ... 그렇게 성공하지 못했습니다. StreamToString
and을 거친 후 StringToStream
, 새로운 Stream
것은 protobuf-net에 의해 deserialize되지 않습니다; Arithmetic Operation resulted in an Overflow
예외 가 발생합니다. 원래 스트림을 역 직렬화하면 작동합니다.
우리의 방법 :
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);
}
이 두 가지를 사용하는 예제 코드 :
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);