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
이게 어려운 내용이 아닌데....가끔 까먹어서 정리해 둡니다 ㅎㅎㅎㅎ