2019. 5. 22. 15:30

C# 클래스(Class)나 모델(Model)을 Json파일로 저장했다가 다시 불러서 모델에 바인딩하기는 쉽습니다.

한단계씩 따라 해 봅시다.

 

 

1. 준비

누겟(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는 아래와 같이 구성하였으나..... 크게 의미는 없습니다.

 

 

2. 클래스를 Json으로 변환하기

위에서 뉴턴 소프트(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)'를 이용하여 문자열로 변환합니다.

 

문자열을 파일로 저장하는 건 간한단 것이니 따로 설명하지 않겠습니다.

 

 

3. Json을 클래스로 변환하기

이건 결국 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

 

이게 어려운 내용이 아닌데....가끔 까먹어서 정리해 둡니다 ㅎㅎㅎㅎ