C# 클래스(Class)나 모델(Model)을 Json파일로 저장했다가 다시 불러서 모델에 바인딩하기는 쉽습니다.
한단계씩 따라 해 봅시다.
누겟(Nuget)에서 'Newtonsoft.Json'를 찾아 설치해 줍니다.
'TestData001.cs' 클래스를 생성합니다.
/// <summary>
/// 테스트용 모델1
/// </summary>
public class TestData001
{
public string StrData1 { get; set; }
public string StrData2 { get; set; }
public int IntData1 { get; set; }
public int IntData2 { get; set; }
}
'TestData002.cs' 클래스를 생성합니다.
public enum Test1Type
{
none = 0,
emum1,
emum2,
emum3,
}
public enum Test2Type
{
none = 0,
emum10 = 10,
emum20 = 20,
emum30 = 30,
}
/// <summary>
/// 테스트용 모델2
/// </summary>
public class TestData002
{
public double DoubleData { get; set; }
public float FloatData { get; set; }
public Test1Type TypeTest1 { get; set; }
public Test2Type TypeTest2 { get; set; }
}
UI는 아래와 같이 구성하였으나..... 크게 의미는 없습니다.
위에서 뉴턴 소프트(Newtonsoft)의 'Json' 유틸을 설치했으면 간단하게 변환이 됩니다.
private void BtnTestData001_Save_Click(object sender, EventArgs e)
{
TestData001 tdTemp = new TestData001();
tdTemp.StrData1 = txtStrData1.Text;
tdTemp.StrData2 = txtStrData2.Text;
tdTemp.IntData1 = Convert.ToInt32(numericIntData1.Text);
tdTemp.IntData2 = Convert.ToInt32(numericIntData2.Text);
//모델을 json 문자열로 변환
string sJson = JsonConvert.SerializeObject(tdTemp);
//파일로 저장
File.WriteAllText(@"TestData001.json", sJson);
}
private void BtnTestData002_Save_Click(object sender, EventArgs e)
{
TestData002 tdTemp = new TestData002();
tdTemp.DoubleData = Convert.ToDouble(txtDoubleData.Text);
tdTemp.FloatData = (float)Convert.ToDouble(txtFloatData.Text);
tdTemp.TypeTest1 = (Test1Type)Convert.ToInt32(numericTypeTest1.Text);
tdTemp.TypeTest2 = (Test2Type)Convert.ToInt32(numericTypeTest2.Text);
//모델을 json 문자열로 변환
string sJson = JsonConvert.SerializeObject(tdTemp);
//파일로 저장
File.WriteAllText(@"TestData002.json", sJson);
}
'JsonConvert.SerializeObject(object)'를 이용하여 문자열로 변환합니다.
문자열을 파일로 저장하는 건 간한단 것이니 따로 설명하지 않겠습니다.
이건 결국 Json문자열을 클래스로 변환하는 것입니다.
private void BtnTestData001_Load_Click(object sender, EventArgs e)
{
//파일 읽기
string sJson = File.ReadAllText(@"TestData001.json");
//json문자열을 모델로 변환
TestData001 tdTemp = JsonConvert.DeserializeObject<TestData001>(sJson);
txtStrData1.Text = tdTemp.StrData1.ToString();
txtStrData2.Text = tdTemp.StrData2.ToString();
numericIntData1.Text = tdTemp.IntData1.ToString();
numericIntData2.Text = tdTemp.IntData2.ToString();
}
private void BtnTestData002_Load_Click(object sender, EventArgs e)
{
//파일 읽기
string sJson = File.ReadAllText(@"TestData002.json");
//json문자열을 모델로 변환
TestData002 tdTemp = JsonConvert.DeserializeObject<TestData002>(sJson);
txtDoubleData.Text = tdTemp.DoubleData.ToString();
txtFloatData.Text = tdTemp.FloatData.ToString();
numericTypeTest1.Text = ((int)tdTemp.TypeTest1).ToString();
numericTypeTest2.Text = ((int)tdTemp.TypeTest2).ToString();
}
'JsonConvert.DeserializeObject<T>(string)'를 이용하여 Json문자열을 모델로 변환합니다.
json파일을 읽어 들이는 것은 텍스트(text) 파일을 읽는 것과 다르지 않으므로 따로 설명하지 않겠습니다.
프로젝트 소스 : GitHub - dang-gun/DotNetSamples/ClassToJson
이게 어려운 내용이 아닌데....가끔 까먹어서 정리해 둡니다 ㅎㅎㅎㅎ