Использование BinaryWriter на объекте - PullRequest
4 голосов
/ 20 июля 2011

Мое приложение представляет собой небольшую базу данных C #, и я использую BinaryWriter для сохранения базы данных в файл, который работает нормально с основными типами, такими как bool, uint32 и т. Д.
Хотя у меня есть переменная типа Object (позволяющая пользователю хранить любой тип данных), однако, поскольку мое приложение не знает (и не нуждается) в реальном типе этой переменной, я не уверен, как написать это используя BinaryWriter.
Есть ли способ, которым я мог бы, возможно, захватить память переменной и сохранить это? Это будет надежно?

Edit:

Ответ, предоставленный ba_friend, имеет две функции для десериализации объекта в байтовый массив, который можно записать вместе с его длиной с помощью BinaryWriter.

1 Ответ

10 голосов
/ 20 июля 2011

Для этого можно использовать сериализацию, особенно BinaryFormatter, чтобы получить byte[].
Примечание : сериализуемые типы должны быть помечены как Сериализуемый с атрибутом [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);
    }
}
...