我有序列化問題。 我想將一個對象轉換爲一個字符串,反之亦然。 我有兩個實用方法:序列化問題
public
static byte[] Serialize(Object o)
{
MemoryStream ms = new MemoryStream();
BinaryFormatter bf1 = new BinaryFormatter();
bf1.Serialize(ms, o);
byte[] buffer = ms.ToArray();
//string retStr = Convert.ToBase64String(buffer);
return buffer;
}
public static object Deserialize(byte[] TheByteArray)
{
//byte[] TheByteArray = Convert.FromBase64String(ParamStr);
MemoryStream ms = new MemoryStream(TheByteArray);
BinaryFormatter bf1 = new BinaryFormatter();
ms.Position = 0;
return bf1.Deserialize(ms);
}
我的測試代碼:
Student obj = new Student();
obj.UserName = "Admin";
obj.Password = "Password";
obj.lessonIds = new int[] { 1, 2, 3, 4, 5 };
obj.lessonNames= new string[] { "Spanish", "Maths" };
obj.Id= 43;
byte[] retByteArray = Crypto.Serialize(obj);
Student objNew = new Student();
objNew = (Student)Crypto.Deserialize(retByteArray);
此代碼不起作用。 錯誤消息是:異常已被調用的目標拋出。 分析完成前遇到的流結束。
結束我的主要目的是轉換對象轉換成字符串,但即使我不能把它你的時候轉換成字節數組
什麼是Cryto指呢? – 2009-06-19 12:24:22
這不是bug,但你不需要 Student objNew = new Student();在調用反序列化之前。你只是創建一個對象,然後用另一個替換它。 – 2009-06-19 12:32:00
重新評論 - 然後簡單地說,你正在反序列化它不正確。它真的*不值得嘗試編寫自己的序列化代碼 - 我強烈建議嘗試protobuf-net(注意:我是作者,但它是免費的)。花幾秒鐘時間才能應用您的示例,從而提供非常高效的結果,而不會產生這些煩人的流錯誤。 – 2009-06-19 18:28:08