REST API로 URL을 요청하여 JSON을 반환 받으면 해당 JSON 구조대로 클래스를 만들어두고 역직렬화하여 값을 받게 되었다. 그런데 JSON 문서를 살펴보니 key의 이름이 동적으로 바뀌는 경우가 있었다. Newtonsoft.Json 라이브러리를 사용하는데 Dictionary를 사용하면 된다고 한다.
문서에 설명된 내용을 보면 api를 요청하여 받은 결과인 Json의 내용이 다음과 같다고 할때.
{
"key" : "value",
"key_value" : {
"kv_1" : "abc",
"kv_2" : "def"
}
}
위의 Json을 class로 표현한다면 아래와 같이 만들게 될 것이다.
public class Temp
{
public string key { get; set; }
public List<KeyValue> key_value { get; set; }
}
public class KeyValue
{
public string kv_1 { get; set; }
public string kv_2 { get; set; }
}
하지만 응답 결과에 따라 kv_3, kv_4 ... 이렇게 key가 늘어날 수 있다.
이럴땐 List가 아니라 Dictionary를 사용한다.
public class Temp
{
public string key { get; set; }
public Dictionary<string, string> key_value { get; set; }
}
string 형태의 json 내용을 역직렬화 하여 Temp 객체에 담을 수 있다.
string str = "{\"key\":\"value\",\"key_value\":{\"kv_1\":\"abc\",\"kv_2\":\"def\"}}";
Temp temp = JsonConvert.DeserializeObject<Temp>(str);
key_value가 Dictionary 형태로 담긴 것을 확인할 수 있다.