YAML 로 프로그램 설정 데이타 저장 및 불러오기 - C#
Software/C#2025. 3. 14. 10:07
반응형
이전에 JSON을 이용하여 제어프로그램의 Recipe 파일의 저장과 불러오기 기능에 대해 포스팅 했었다.
그런데 조금 사용하기 불편하고 코딩량이 많아서 다른 수단을 찾다가 YAML 이 최근에 설정파일 저장용으로 많이 사용된다는 것을 보고 사용해 보았다. 코딩량도 상당히 줄었고 무엇보다 항목을 추가하거나 제거할 때 코딩에서 수정해야 하는 부분이 많이 줄어서 현재 모든 프로그램에서 사용하고 있다.
1. YAML 사용하기 위해 Nuget에서 YamlDotNet 을 먼저 설치한다.
2. Yaml 데이타를 저장하거나 불러오기 위한 클래스 생성 : 다양한 종류의 설정항목에 대응하기 위해 generic class 형식으로 만듦
public class YamlControl<T>
{
public bool SaveYaml(string FileName, T data)
{
bool result = true;
try
{
var serializer = new SerializerBuilder().Build().Serialize(data);
using StreamWriter sw = new StreamWriter(FileName);
sw.Write(serializer);
}
catch
{
result = false;
}
return result;
}
public bool LoadYaml(string FileName, ref T objectData)
{
bool result = true;
try
{
var yaml = File.ReadAllText(FileName);
objectData = new DeserializerBuilder().Build().Deserialize<T>(yaml);
}
catch
{
result = false;
}
return result;
}
}
3. 설정항목에 대한 클래스 생성 : 아래 클래스는 프로그램에 따라 변경해야 하며 아래 내용은 예시적으로 만든 임의의 클래스
public class RecipeInform
{
public BurnInParam burnInParam = new BurnInParam();
public SweepMeasParam sweepMeasParam = new SweepMeasParam();
public class BurnInParam
{
public bool Measurement { get; set; }
public double Bias { get; set; }
public double Step { get; set; }
}
public class SweepMeasParam
{
public double StartCurrent { get; set; }
public double StopCurrent { get; set; }
public double StepCurrent { get; set; }
}
}
4. 사용방법
항목 불러오기
YamlControl<RecipeInform> yamlControl = new YamlControl<RecipeInform>();
string filename = string.Format("{0}{1}.yaml", Global.conditionFolder, comboCondition.Text);
RecipeInform recipe = new RecipeInform();
yamlControl.LoadYaml(filename, ref recipe);
항목 저장하기
RecipeInform recipe = new RecipeInform();
recipe.burnInParam.Measurement = checkBurnInMeas.Checked;
recipe.burnInParam.Bias = double.Parse(textBiasCurrent.Text);
recipe.burnInParam.Step = double.Parse(textBurnInStepCurrent.Text);
recipe.sweepMeasParam.StartCurrent = double.Parse(textStartCurrent.Text);
recipe.sweepMeasParam.StopCurrent = double.Parse(textStopCurrent.Text);
recipe.sweepMeasParam.StepCurrent = double.Parse(textStepCurrent.Text);
string filename = string.Format("{0}{1}.yaml", Global.conditionFolder, comboCondition.Text);
YamlControl<RecipeInform> yamlControl = new YamlControl<RecipeInform>();
yamlControl.SaveYaml(filename, recipe) ;
반응형
'Software > C#' 카테고리의 다른 글
IEEE754 단정밀(32Bit) 데이타와 float 형 변수의 상호 변환 - C# (0) | 2025.03.31 |
---|---|
Flow Meter(FML300-D SERIES) 제어 클래스 - C# (0) | 2025.03.11 |
Chroma IT 의 UPS(Rodem Series) 제어 클래스 - C# (0) | 2025.03.11 |
Nice Cool 의 칠러 제어 (CM Series) (0) | 2024.10.29 |
C#으로 만들어 보는 Sokoban Game(WPF) (0) | 2024.04.18 |
댓글()