Serialize / Deserialze to C # string

The first time you play with serialization in C # ... any help would be greatly appreciated! The following is a generic serializer and deserializer pedigree:

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'm 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 to run 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 the error "SerializationException was unhandled: input stream is not a valid binary format. Initial content (in bytes): 41-41-45-41-41-41-44 -2F-2F-2F -2F-2F-41-51-41-41-41 ... "

Any advice on what I'm doing wrong or how to fix this will be greatly appreciated!

+6
source share
1 answer

You use Base64 to convert a byte array to a string and GetUtf8 bytes to convert from a string back to a byte array.

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

+6
source

Source: https://habr.com/ru/post/914590/


All Articles