Десериализовать ini в класс

94
23 мая 2021, 12:10

Есть проект, который содержит в себе довольно много различных ini файлов. Я могу с ними работать либо через доступные в WinAPI методы, либо с помощью какой либо библиотеки, но все они подразумевают использование значений из ini как ini.Read("Cat", "Value");, что не очень удобно, ибо всегда надо знать точное название переменной и ты от нее в итоге сильно зависишь.

Скажите, есть ли возможность работать с ini файлом, как с JSON? То есть создать структуру классов, десериализовать файл в нее и уже в проекте писать ini.Cat.Value? Может можно сделать какую либо обертку для этого или есть уже готовые решения?

Answer 1

Благодаря наводке @PashaPash я начал пробовать различные библиотеки с GitHub. Предложенные им имели ряд неудобств (например неверная кодировка, или вовсе дублирование значений).

В итоге остановился на данном проекте: Fluffy.INI, который подошел для меня по всем критериям

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

  • Создаем как и в JSON структуру классов:

    public class PatchSection
    {
        public int UseOSAllocators { get; set; }
    }
    public class TestSection
    {
        [FluffyComment("Клевый комментарий!")]
        public string TestValue { get; set; }
    }
    public class RootIni
    {
        public PatchSection Patch { get; set; }
        public TestSection Test { get; set; }
    }
    
  • Дальше как и обычно десериализируем:

    var ini = FluffyConverter.DeserializeObject<RootIni>(File.ReadAllText("Test.ini"));
    
  • Меняем нужное значение:

    ini.Test.TestValue = "Некое значение";
    
  • Сериализуем и сохраняем результат:

    File.WriteAllText(iniFile, FluffyConverter.SerializeObject(ini));
    

Результатом будет ini файл со всем нам необходимым:

[Patch]
UseOSAllocators=1
[Test]
# Клевый комментарий!
TestValue=Некое значение
READ ALSO
Datatype mismatch sqlite

Datatype mismatch sqlite

http://prntscrcom/oqvhki - Вот типы в БД Как отметить в БД ID чтобы гуид кушал его как верный тип?

179
ASP.NET Core Linux. Публикация

ASP.NET Core Linux. Публикация

Опубликовал приложение на Linux UbuntuПриложение работает нормально

110
создание asp.net mvc

создание asp.net mvc

когда в terminal пишу команду dotnet new mvc создается mvc ,а потом когда запускаю dotnet run и перехожу на localhost:5000 включается вот такая страница , почему?раньше...

117
Выбор базы данных для одного файла XML

Выбор базы данных для одного файла XML

Недавно впервые столкнулся в web разработкой

132