Сохранение структур данных в С#

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

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

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

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

Ответ 1

Собственно, С# (язык) не знает ничего о сериализации, но .NET(framework) предоставляет множество способов... 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);
        }

Ответ 3

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

EDIT: по какой-то причине я был занижен, чтобы предположить это, потому что XmlSerializer не может сериализовать словарь.

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

Ответ 4

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

Ответ 5

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