我有序列化问题。 我想将一个对象转换为一个字符串,反之亦然。 我有两个实用方法:序列化问题
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