可以';t从根据字符串创建的流中反序列化对象

本文关键字:创建 对象 反序列化 字符串 可以 | 更新日期: 2023-09-27 18:28:24

我想创建一个将对象序列化到文件的方法。然后我读取文件并获得字符串形式的内容。我将字符串保存在数据库中,然后从数据库中读取字符串,并将其反序列化到对象

我几乎做到了,但我得到了错误的there is no map for object

这就是我序列化对象的方式

public static String Serialize(Object toSerialize)
    {
        Random random = new Random();
        int randomNumber = random.Next(100000, 1000000000);
        String fileName = randomNumber + ".txt";
        fileName = "EmployeeInfo.txt";
        Stream stream = File.Open(fileName, FileMode.Create);
        BinaryFormatter bformatter = new BinaryFormatter();
        bformatter.Serialize(stream, toSerialize);
        stream.Close();
        String fileContent = File.ReadAllText(fileName);
        return fileContent;
    }

这就是我如何将字符串转换为流以反序列化

String serialized = Serializer.Serialize(user);
        MemoryStream mStream = new MemoryStream();
        StreamWriter writer = new StreamWriter(mStream);
        writer.Write(serialized);
        writer.Flush();
        mStream.Position = 0;

现在反序列化

 public static Object Deserialize(Stream stream)
    {
        Object returnObject;
        BinaryFormatter bformatter = new BinaryFormatter();
        returnObject = (Object)bformatter.Deserialize(stream);
        stream.Close();
        return returnObject;
    }

我哪里搞错了?我应该做些什么才能让它发挥作用?

可以';t从根据字符串创建的流中反序列化对象

得到了答案。

首先感谢@I4V的评论:

这是我的序列化方法

public static String Serialize(Object toSerialize)
    {
        Random random = new Random();
        int randomNumber = random.Next(100000, 1000000000);
        String fileName = randomNumber + ".txt";
        fileName = "EmployeeInfo.txt";
        MemoryStream stream = new MemoryStream();
        BinaryFormatter bformatter = new BinaryFormatter();
        bformatter.Serialize(stream, toSerialize);
        String fileContent = Convert.ToBase64String(stream.ToArray());
        stream.Close();
        return fileContent;
    }

现在可以从字符串反序列化对象的方法Deserialize

 public static Object Deserialize(String stringObject)
    {
        Object returnObject;
        byte[] bytes = Convert.FromBase64String(stringObject);
        MemoryStream stream = new MemoryStream(bytes);
        BinaryFormatter bformatter = new BinaryFormatter();
        returnObject = bformatter.Deserialize(stream);
        return returnObject;
    }

这就是