Сериализация/десериализация в строку 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 was unhandled :] Входной поток не является допустимым двоичным форматом.Начальное содержимое (в байтах ): :41 -41 -45 -41 -41 -41 -44 -2F -2F -2F -2F -2F -41 -51 -41 -41 -41..."

Любой совет о том, что я делаю неправильно или как это исправить, буду очень признателен!

7
задан ElfsЯUs 4 May 2012 в 08:09
поделиться