Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在对象上使用BinaryWriter_C#_Database_Binarywriter - Fatal编程技术网

C# 在对象上使用BinaryWriter

C# 在对象上使用BinaryWriter,c#,database,binarywriter,C#,Database,Binarywriter,我的应用程序是一个小型C#数据库,我正在使用BinaryWriter将数据库保存到一个文件中,该文件可以很好地处理bool、uint32等基本类型。 虽然我有一个类型为Object(允许用户存储任何数据类型)的变量,但是由于我的应用程序不知道(也不需要)这个变量的真实类型,我不确定如何使用BinaryWriter编写它 是否有一种方法可以获取变量的内存并保存它?这可靠吗 编辑: ba_friend提供的答案有两个用于将对象反序列化为字节数组的函数,可以使用BinaryWriter随其长度一起写入

我的应用程序是一个小型C#数据库,我正在使用
BinaryWriter
将数据库保存到一个文件中,该文件可以很好地处理bool、uint32等基本类型。
虽然我有一个类型为
Object
(允许用户存储任何数据类型)的变量,但是由于我的应用程序不知道(也不需要)这个变量的真实类型,我不确定如何使用
BinaryWriter
编写它
是否有一种方法可以获取变量的内存并保存它?这可靠吗

编辑:


ba_friend提供的答案有两个用于将对象反序列化为字节数组的函数,可以使用BinaryWriter随其长度一起写入。

您可以使用序列化,尤其是
BinaryFormatter
来获取
字节[]

注意:要序列化的类型必须使用
[Serializable]
属性标记为Serializable

public static byte[] SerializeToBytes<T>(T item)
{
    var formatter = new BinaryFormatter();
    using (var stream = new MemoryStream())
    {
        formatter.Serialize(stream, item);
        stream.Seek(0, SeekOrigin.Begin);
        return stream.ToArray();
    }
}

非常感谢,我已经知道了如何在序列化时使用它,尽管我不知道如何使用这种技术进行反序列化-我已经适当地更新了问题文本。哈哈哈!:)哦,我的天,我正试图从网上的许多例子中计算出来,到目前为止,我的函数比你优雅的3行长8行。谢谢你的帮助。:)这是可行的,但这是迄今为止序列化.net中任何内容最慢的方法。Microsoft建议不要使用BinaryFormatter:
public static object DeserializeFromBytes(byte[] bytes)
{
    var formatter = new BinaryFormatter();
    using (var stream = new MemoryStream(bytes))
    {
        return formatter.Deserialize(stream);
    }
}