7

First time playing with serialization in C#... any help would be greatly appreciated! The following are my generic serializer and deserializer:

    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();
        }
    }

This is the object I am trying to serialize:

[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; }
    }
}

And an example of how am running it:

        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);

When I try to run this I get an error "SerializationException was unhandled: The input stream is not a valid binary format. The starting contents (in bytes) are: 41-41-45-41-41-41-44-2F-2F-2F-2F-2F-41-51-41-41-41 ..."

Any advice on what I am doing wrong or how to fix this would be greatly appreciated!

1

1 Answer 1

7

You are using Base64 to convert byte array to string and GetUtf8 bytes to convert from string back to byte array.

Replace System.Text.Encoding.UTF8.GetBytes(str); with Convert.FromBase64String(str);

Sign up to request clarification or add additional context in comments.

1 Comment

Yah, just realized my mistake when I saw your post... thanks Alexei!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.