public class MyDate
{
public int year;
public int month;
public int day;
}
public class Lad
{
public string firstName;
public string lastName;
public MyDate dateOfBirth;
}
class Program
{
static void Main()
{
var obj = new Lad
{
firstName = "Markoff",
lastName = "Chaney",
dateOfBirth = new MyDate
{
year = 1901,
month = 4,
day = 30
}
};
//c# model 을 json 문자열로 변환하기(Serializing to Json String)
var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
//json 문자열을 c# model 에 담아 사용하기(Deserializing to Object)
var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<Lad>(jsonString );
}
}
해당 사이트에 들어가서 "Convert Json to C#" 에서 convert 하면 아래와 같은 예제를 제공해 줍니다.
// Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse);
public class Content
{
public string lClass { get; set; }
public string facilName { get; set; }
public string majorSeq { get; set; }
public string mClass { get; set; }
public string totalCount { get; set; }
}
public class DataSearch
{
public List<Content> content { get; set; }
}
public class Root
{
public DataSearch dataSearch { get; set; }
}
위의 model class 를 기반으로 web api (https://www.career.go.kr/) 를 호출하면 위와 같은 json 형태의 데이터를 제공해 주며, C# 에서 json parse 를 제공해 주는 Newtonsoft.Json 을 참조하여 foreach 구문으로 cvs 형태로 문자열을 만들어 file 를 create 해서 받아 볼 수 도 있습니다.
private static async Task CallMajorAsync(int thisPage, string gubun, string csvFileName)
{
var svcCode = "MAJOR";
var perPage = "100";
var targetApiUrl = apiUrl + $"&svcCode={svcCode}&gubun={gubun}&perPage={perPage}&thisPage={thisPage}";
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(targetApiUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//GET방식
HttpResponseMessage response = await client.GetAsync(targetApiUrl);
if (response.IsSuccessStatusCode)
{
var jsonString = await response.Content.ReadAsStringAsync();
//File.WriteAllText(@"D:/log.txt", jsonString, System.Text.Encoding.Default);
//var welcome = MAJOR.Welcome.FromJson(jsonString);
var modelMajor = JsonConvert.DeserializeObject<Models.Major.Root>(jsonString);
var lines = new List<string>();
var lclass = "";
var facilName = "";
var majorSeq = "";
var mClass = "";
//국방과학기술학부,국방기술학과\r\n(대학교),국방기술학부,국방디지털융합학과,국방무기체계학과,국방학과
foreach (var info in modelMajor.dataSearch.content)
{
lclass = info.lClass.Replace(",", "/").Replace(System.Environment.NewLine, string.Empty);
facilName = info.facilName.Replace(",", "/").Replace(System.Environment.NewLine, string.Empty);
majorSeq = info.majorSeq;
mClass = info.mClass.Replace(",", "/").Replace(System.Environment.NewLine, string.Empty);
lines.Add(string.Join(",",
lclass,
facilName,
majorSeq,
mClass));
}
File.AppendAllLines(@"D:/" + csvFileName, lines, System.Text.Encoding.Default);
}
else
{
Console.WriteLine("Internal server Error");
}
}
}