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