Сериализация нескольких документов в один файл с использованием YamlDotNet - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть инструмент с несколькими аксессуарами, которые можно прикреплять и снимать. Каждый аксессуар имеет свои настройки, и некоторые из этих настроек изменятся при повторной калибровке аксессуара.

Я хочу сохранить данные настроек для аксессуаров в виде документов в одном файле YAML с помощью YamlDotNet. Файл настроек будет обновляться при повторной калибровке аксессуара. Я нашел много сообщений о десериализации нескольких документов в одном файле, но ничего о сериализации нескольких документов в один файл (я новичок в YamlDotNet. Можете ли вы сказать?). В частности, как получить разделитель документов --- и индикатор конечного документа ... в файл?

Для иллюстрации приведу пример кода. Во-первых, класс для хранения настроек аксессуара:

public class Accessory
{
    public string AccessoryName { get; set; }
    public float CalibrationConstant1 { get; set; }
    public float CalibrationConstant2 { get; set; }
    public DateTime CalibrationDate { get; set; }
}

и список для хранения нескольких аксессуаров (может быть от одного до десяти из них):

public class AccessoryList
{
    public List<Accessory> accessory;
    public AccessoryList()
    {
        accessory = new List<Accessory>();
    }
}

Моя попытка сериализации настроек:

ISerializer serializer = new SerializerBuilder().EmitDefaults().Build();
string file = Application.StartupPath + @"\Accessories.yml";
using (StreamWriter writer = File.CreateText(file))
    foreach (Accessory accessory in AccessoryList.accessory)
        {
            serializer.Serialize(writer, accessory);
        }

Итак, допустим, у нас есть два аксессуара. Получившийся файл .yml будет выглядеть так:

AccessoryName: Gargleblaster Pan-Galactic
CalibrationConstant1: 3.1415927
CalibrationConstant2: 2.718
CalibrationDate: 2018-11-13T12:33:55.9900338-05:00
AccessoryName: Phaser Set To Stun
CalibrationConstant1: 1.234321
CalibrationConstant2: 1.618
CalibrationDate: 2018-11-10T01:23:37.1453278-05:00

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

Любая помощь будет принята с благодарностью! Иногда самые очевидные вещи труднее всего увидеть новичку.

...