第一次玩C#中的序列化…任何帮助将不胜感激!
以下是我的通用序列化器和反序列化器:
以下是我的通用序列化器和反序列化器:
public static string SerializeObject<T>(T objectToSerialize) { BinaryFormatter bf = new BinaryFormatter(); MemoryStream memStr = new MemoryStream(); try { bf.Serialize(memStr,objectToSerialize); memStr.Position = 0; return Convert.ToBase64String(memStr.ToArray()); } finally { memStr.Close(); } } public static T DeserializeObject<T>(string str) { BinaryFormatter bf = new BinaryFormatter(); byte[] b = System.Text.Encoding.UTF8.GetBytes(str); MemoryStream ms = new MemoryStream(b); try { return (T)bf.Deserialize(ms); } finally { ms.Close(); } }
这是我尝试序列化的对象:
[Serializable()] class MatrixSerializable : ISerializable { private bool markerFound; private Matrix matrix; public MatrixSerializable( Matrix m,bool b) { matrix = m; markerFound = b; } public MatrixSerializable(SerializationInfo info,StreamingContext ctxt) { markerFound = (bool)info.GetValue("markerFound",typeof(bool)); matrix = Matrix.Identity; if (markerFound) { //deserialization code } } public void GetObjectData(SerializationInfo info,StreamingContext ctxt) { // serialization code } public Matrix Matrix { get { return matrix; } set { matrix = value; } } public bool MarkerFound { get { return markerFound; } set { markerFound = value; } } }
以及如何运行它的示例:
MatrixSerializable ms = new MatrixSerializable(Matrix.Identity * 5,true); string s = Serializer.SerializeObject<MatrixSerializable>(ms); Console.WriteLine("serialized: " + s); ms = Serializer.DeserializeObject<MatrixSerializable>(s); Console.WriteLine("deserialized: " + ms.Matrix + " " + ms.MarkerFound);
当我尝试运行它时,我得到一个错误“SerializationException未处理:输入流不是有效的二进制格式.起始内容(以字节为单位)是:41-41-45-41-41-41-44-2F- 2F-2F-2F-2F-41-51-41-41-41 ……“
关于我做错了什么或如何解决这个问题的任何建议将不胜感激!
解决方法
您正在使用Base64将字节数组转换为字符串,并使用GetUtf8字节将字符串转换回字节数组.
替换System.Text.Encoding.UTF8.GetBytes(str);与Convert.FromBase64String(str);