YAML์ ์ฌ๋์ด ์ฝ๊ณ ์ฐ๊ธฐ ์ฌ์ด ๋ฐ์ดํฐ ์ง๋ ฌํ ์์ ์ ๋๋ค. ์ด์ ๋ง์ ๋ถ๋ค์ด JSON์ผ๋ก ์ค์ ํ์ผ์ ๊ตฌ์ฑํ์ค ํ ๋ฐ์ YAML์ ๋๋ฌ๋ณด์๊ณ YAML๋ก ๋ฐ๊ฟ๋ณด์๋ ๊ฒ๋ ์ถ์ฒ๋๋ฆฝ๋๋ค.
์ผ๋ฉ ์ ๋ ํ์ดํ๋ผ์ธ ๋๋ฌธ์ ์ฌ์ฉํ๊ณ ์์ง๋ง ์ง๊ด์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ใ ใ
1๊ฐ์ ์ข์์
๋ง์นจ ์ค์ ํ์ผ์ ๋ง๋ค์ด์ผ ํด์ ๋ฐฉ๊ธ ์ ์ฉํด๋ดค๋๋ฐ์.
์ ๋ ์์ผ๋ก ์ ๊ทน์ ์ผ๋ก ์จ๋ด์ผ๊ฒ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ ๊ฐ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ Serialize/Deserialize ๋ถ๋ถ๋ ํ์ํ์ ๋ถ์ ์ํด ์๋ ๋จ๊น๋๋ค.
Yaml Serialize/Deserialize C#
using DevFlow.Data;
using DevFlow.Data.Settings;
using System;
using System.IO;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
namespace DevFlow.Windowbase.Flowbase
{
public class FlowConfig
{
public static string WIN_PATH { get; }
public static string SYS_PATH { get; }
public static string CFG_PATH { get; }
public static ConfigModel Config { get; private set; }
static FlowConfig()
{
WIN_PATH = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
SYS_PATH = string.Format(@"{0}\DevFlow\System", WIN_PATH);
CFG_PATH = string.Format(@"{0}\Config.yaml", SYS_PATH);
LoadConfigFile();
}
private static void LoadConfigFile()
{
if (!Directory.Exists(SYS_PATH))
{
Directory.CreateDirectory(SYS_PATH);
}
if (!File.Exists(CFG_PATH))
{
SaveConfig(new ConfigModel());
}
var deserializer = new DeserializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.Build();
Config = deserializer.Deserialize<ConfigModel>(File.ReadAllText(CFG_PATH));
}
public static void SaveLanguage(LanguageType lang)
{
Config.Language = lang;
SaveConfig(Config);
}
public static void SaveTheme(ThemeType theme)
{
Config.Theme = theme;
SaveConfig(Config);
}
public static ConfigModel LoadConfig()
{
return Config;
}
private static void SaveConfig(ConfigModel config)
{
var serializer = new SerializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.Build();
var yaml = serializer.Serialize(config);
File.WriteAllText(CFG_PATH, yaml);
}
}
}
2๊ฐ์ ์ข์์