본문 바로가기
팁 & 노하우/C#

C#, .net 8, core, MVC HttpResponseMessage XML to JSON 변환

by 대디동동 2024. 2. 29.
728x90

API 개발 및 서비스에서 많이 사용하는 형식은 XML, JSON 타입이 있습니다.

 

JSON은 일반적으로 API, 모바일 앱 및 데이터 스토리지에 더 적합하고,

XML은 데이터 교환이 필요한 복잡한 문서 구조에 더 적합한 특징이 있지만,

요즘 API 개발 및 서비스에는 거의 JSON을 많이 사용합니다.

 

하지만, 예전에 개발된 서비스 및 특정 사유로 인해서 XML로 데이터로 전달하는 경우가 있는데,

C#에서 XML을 JSON으로 변경하는 간단한 방법을 알려 드리겠습니다.


C# JSON 라이브러리 중 가장 많이 사용하는 것이 Newtonsoft.Json입니다.

 

https://www.newtonsoft.com/json

 

Json.NET - Newtonsoft

× PM> Install-Package Newtonsoft.Json or Install via VS Package Management window. ZIP file containing Json.NET assemblies and source code: Json.NET

www.newtonsoft.com

 

  1. 해당 패키지를  Nuget 패키지 관리자를 통해서 설치하고
  2. using Newtonsoft.Json; 를 상단에 입력 후
  3. XmlDocument, LoadXml, JsonConvert.SerializeXmlNode 함수 이용하여 처리하면 끝입니다.

아래 소스는 C#  API로 타 사이트의 XML 파일을 가져온 후 JSON 타입으로 다시 넘겨주는 간단한 예제입니다.

우리나라 공공 데이터에서 제공하는 API 중 XML로 보내주는 경우가 상당히 많아서,

실무에서 많이 사용되니 참고해서 사용하세요.

 

using Newtonsoft.Json;

[HttpGet]
public async Task<object> GetExamList()
{
    if (ModelState.IsValid)
    {
        using (var client = new HttpClient())
        {
            string DATAGOKR_API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
            string apiUrl = "http://openapi.q-net.or.kr/api/service/rest/InquiryListNationalQualifcationSVC/getList";

            HttpResponseMessage response = await client.GetAsync($"{apiUrl}?serviceKey={DATAGOKR_API_KEY}").ConfigureAwait(false);

            if (response.IsSuccessStatusCode)
            {
                var xmlResponse = response.Content.ReadAsStringAsync().Result;

                var xmlDoc = new XmlDocument();
                xmlDoc.LoadXml(xmlResponse);

                var jsonResponse = JsonConvert.SerializeXmlNode(xmlDoc);

                return Ok(jsonResponse);

            }
            else
            {
                return BadRequest();
            }
        }
    }
    else
    {
        return BadRequest(ModelState);
    }
}

 

이번에는 간단하지만 활용성이 많은 방법을 통해 Junior 개발자 분들에게 도움이 되었으면 합니다.

반응형