ฉันต้องการทำให้วัตถุเป็นสตริงและกลับเป็นอันดับ
เราใช้ protobuf-net เพื่อเปลี่ยนวัตถุให้เป็นกระแสข้อมูลและย้อนกลับได้สำเร็จ
อย่างไรก็ตามสตรีมไปยังสตริงและสำรอง ... ไม่ประสบความสำเร็จ หลังจากผ่านไปStreamToString
และStringToStream
ใหม่Stream
ไม่ได้ deserialized โดย protobuf สุทธิ; มันทำให้เกิด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);