在内存流中对象的二进制序列化

using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System;
public sealed class Serializer
{
    private Serializer() { }

    public static string SerializeObject(object obj)
    {
        IFormatter formatter = new BinaryFormatter();
        string result = string.Empty;
        using (MemoryStream stream = new MemoryStream())
        {
            formatter.Serialize(stream, obj);

            byte[] byt = new byte[stream.Length];
            byt = stream.ToArray();
            //result = Encoding.UTF8.GetString(byt, 0, byt.Length);

            result = Convert.ToBase64String(byt);
            stream.Flush();
        }
        return result;
    }

    public static object DeserializeObject(string str)
    {
        IFormatter formatter = new BinaryFormatter();
        //byte[] byt = Encoding.UTF8.GetBytes(str);

        byte[] byt = Convert.FromBase64String(str);
        object obj = null;
        using (Stream stream = new MemoryStream(byt, 0, byt.Length))
        {
            obj = formatter.Deserialize(stream);
        }
        return obj;
    }
}

再次单元测试通过了,说明修改有效,回头debug到“result = Convert.ToBase64String(byt); ”,result的值开头没有"\0"了,都是字母,这才证明了序列化成功的原因。之后对基于64位的字符串转换应该多加关注,往往能起到令人惊喜的效果,本案总算是结案了。
原文地址:https://www.cnblogs.com/luluping/p/1740123.html