【问题标题】:Using BinaryWriter on an Object在对象上使用 BinaryWriter
【发布时间】:2011-07-20 09:18:36
【问题描述】:

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

编辑:

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

【问题讨论】:

    标签: c# database binarywriter


    【解决方案1】:

    您可以为此使用序列化,尤其是 BinaryFormatter 来获取 byte[]
    注意:您要序列化的类型必须标记为 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();
        }
    }
    

    public static object DeserializeFromBytes(byte[] bytes)
    {
        var formatter = new BinaryFormatter();
        using (var stream = new MemoryStream(bytes))
        {
            return formatter.Deserialize(stream);
        }
    }
    

    【讨论】:

    • 非常感谢,我已经弄清楚如何在序列化时使用它,虽然我看不到如何使用这种技术反序列化 - 我已经适当地更新了问题文本。
    • 哈哈哈! :) 哦,天哪,我正在尝试从网上的众多示例中解决这个问题,到目前为止,与您的优雅 3 相比,我的函数长 8 行。感谢您的帮助。 :)
    • 这可行,但它是迄今为止在 .net 中序列化任何内容的最慢方法。
    • 微软建议不要使用 BinaryFormatter:docs.microsoft.com/en-us/dotnet/standard/serialization/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    相关资源
    最近更新 更多