Использование BinaryWriter для объекта

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

Изменить:

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


person R4D4    schedule 20.07.2011    source источник


Ответы (1)


Для этого можно использовать сериализацию, особенно 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);
    }
}
person ba__friend    schedule 20.07.2011
comment
Большое вам спасибо, я придумал, как использовать это при сериализации, хотя я не вижу, как десериализовать с помощью этой техники - я соответствующим образом обновил текст вопроса. - person R4D4; 20.07.2011
comment
Хахаха! :) Боже мой, я пытаюсь понять это из многочисленных примеров в сети, и пока моя функция составляет 8 строк по сравнению с вашими элегантными 3. Спасибо за вашу помощь. :) - person R4D4; 20.07.2011
comment
Это работает, но это самый медленный способ сериализации чего-либо в .net. - person Kelly Elton; 03.01.2016
comment
Microsoft не рекомендует использовать BinaryFormatter: docs.microsoft.com/ en-us/dotnet/standard/serialization/ - person Vitaliy Ulantikov; 14.02.2021