C #: сохранить общий список <> объектов в файл потока - PullRequest
2 голосов
/ 15 марта 2011

У меня есть List<Employee> объект, я хочу сохранить этот объект в файловом потоке.(Что было бы непросто для чтения человеком)

Кроме того, я хочу получить List<Employee> из потока для отображения списка сотрудников в пользовательском интерфейсе (я использую .NET Windows Forms Application)

Я также хочу обновить конкретную запись в файле steam .
Может кто-нибудь сообщить мне, что я хотел бы сделать это?

Если сериализация являетсяЕдинственный способ сделать это, пожалуйста, дайте мне знать, как я могу использовать его для обновления конкретной информации о записи.

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 15 марта 2011

С сериализацией вам придется десериализовать весь список и затем сериализовать его обратно для выполнения операции обновления.

Если вы не хотите, чтобы вывод был удобочитаемым, BinaryFormatter - этопутьОднако, если вы действительно хотите сделать его нечитаемым для случайных людей, рассмотрите возможность применения некоторого алгоритма кодирования к вашим сериализованным данным, например RSA.

Пример использования BinaryFormatter для сериализации:

using(FileStream fs = File.Open(FileName, FileMode.Create)) {
    try
    {
        BinaryFormatter bf = new BinaryFormatter();
        bf.Serialize(fs, list);
    }
    catch (SerializationException)
    {
        // error handling
    }
}

И десериализация:

using(FileStream fs = File.OpenRead(FileName)) {
try
    {
        BinaryFormatter bf = new BinaryFormatter();
        var list = (List<int>)bf.Deserialize(fs);
    }
    catch (SerializationException)
    {
        // Error handling
    }
}

РЕДАКТИРОВАТЬ: немного изменил примеры кода

3 голосов
/ 15 марта 2011

Вместо использования сериализации, другой вариант - использовать решение NoSql, такое как db4o или любое из перечисленных в этом вопросе .

Вот сообщение в блоге , в котором говорится о том, как использовать db4o.(основан на mvc, но может использоваться и в приложении winform.

Это позволит вам использовать возможности linq для простого запроса 5000 записей и обновления объекта без особых проблем.

...