序列化/反序列化为字符串C#

第一次玩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);

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...