Сохранение структур данных в C # - PullRequest
11 голосов
/ 16 декабря 2008

Я изучаю C #, написав менеджер домашней библиотеки.

У меня есть BookController, который будет хранить книги в структуре данных и выполнять над ними операции.

Есть ли в C # способ сохранения данных в словаре в локальный файл, возможно, в виде XML для загрузки позже, или мне придется написать его самому?

Какой наилучший метод сохранения и загрузки этих данных доступен для C #? Просто нужно указывать в хорошем направлении.

Ответы [ 5 ]

23 голосов
/ 16 декабря 2008

На самом деле C # (язык) не знает ничего о сериализации, но .NET (фреймворк) предоставляет множество способов ... XmlSerializer, BinaryFormatter, DataContractSerializer ( .NET 3.0) - или есть несколько специально разработанных сред сериализации.

Что использовать, зависит от ваших требований; BinaryFormatter прост в использовании, но записывает информацию метаданных сборки в файл, что делает его непереносимым (например, вы не можете открыть его в Java). XmlSerializer и DataContractSerializer в основном основаны на xml, что делает его довольно переносимым, но довольно большим, если вы не сжимаете его.

Некоторые проприетарные сериализаторы находятся на полпути между ними; protobuf-net - это двоичный форматер (очень плотные данные), но он следует переносимому стандарту для формата данных (спецификация буферов протокола Google). Полезно ли это, зависит от вашего сценария.

Типичный код (здесь используется XmlSerializer):

        XmlSerializer ser = new XmlSerializer(typeof(Foo));
        // write
        using (var stream = File.Create("foo.xml"))
        {
            ser.Serialize(stream, foo); // your instance
        }
        // read
        using (var stream = File.OpenRead("foo.xml"))
        {
            Foo newFoo = (Foo)ser.Deserialize(stream);
        }
6 голосов
/ 16 декабря 2008

Посмотрите на Сериализация и ISerializable интерфейс

Позволяет сохранить состояние объекта в переносимой форме.

1 голос
/ 16 декабря 2008

Я создал метод расширения, который берет объект и создает для вас строку XML, все, что вам нужно сделать, это сохранить / загрузить из файла. XmlSerialisation

1 голос
/ 16 декабря 2008

Вам также следует рассмотреть возможность использования Linq to SQL (или Entity Framework) для сопоставления O / R и сохранения ваших данных в базе данных (SQL CE, SQL Express).

1 голос
/ 16 декабря 2008

Если вы хотите, чтобы ваши данные были в формате XML, есть XmlSerializer .

РЕДАКТИРОВАТЬ: по какой-то причине я был отклонен за предложение, потому что XmlSerializer не может сериализовать словарь.

Чтобы обойти эту проблему, вы всегда можете настроить процесс сериализации, например this

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...