c#中的二进制序列化

Binary Serialization in c#

我正在尝试在 C# 中使用二进制序列化来序列化一个 class 对象。我已经尝试过,并且在所有我能找到的地方,在我看到的所有示例中,序列化数据总是进入一个文件。

在我的例子中,我必须将序列化数据存储在 SQL 中。以下是我创建的方法的示例。

//Serializing the List
public void Serialize(Employees emps, String filename)
{
    //Create the stream to add object into it.
    System.IO.Stream ms = File.OpenWrite(filename); 
    //Format the object as Binary

    BinaryFormatter formatter = new BinaryFormatter();
    //It serialize the employee object
    formatter.Serialize(ms, emps);
    ms.Flush();
    ms.Close();
    ms.Dispose();
}

如何在字符串变量中直接获取序列化数据?我不想使用文件。

请帮忙。

只需使用 MemoryStream ms = new MemoryStream() 而不是您的文件流。 你可以通过调用ms.ToArray()序列化后提取一个byte[]用于Storage到SQL。

并且不要忘记将您的 Stream 放入 using-Statement 中,以保证正确处理分配的资源。

C# 中将字节数组表示为字符串的最简单方法是使用 base64 编码。下面的示例显示了如何在您的代码中实现这一点。

        public void Serialize(Employees emps, String filename)
        {
            //Create the stream to add object into it.
            MemoryStream ms = new MemoryStream();

            //Format the object as Binary

            BinaryFormatter formatter = new BinaryFormatter();
            //It serialize the employee object
            formatter.Serialize(ms, emps);

            // Your employees object serialised and converted to a string.
            string encodedObject = Convert.ToBase64String(ms.ToArray());

            ms.Close();
        }

这将创建字符串 encodedObject。要从字符串中检索字节数组和序列化对象,您将使用以下代码。

            BinaryFormatter bf = new BinaryFormatter();

            // Decode the string back to a byte array
            byte[] decodedObject = Convert.FromBase64String(encodedObject);

            // Create a memory stream and pass in the decoded byte array as the parameter
            MemoryStream memoryStream = new MemoryStream(decodedObject);

            // Deserialise byte array back to employees object.
            Employees employees = bf.Deserialize(memoryStream);