DBA

ASP.NET Web API에서 JsonConverter를 이용한 커스텀 JSON 파싱 방법 본문

[3] Development/MVC(ASP.NET with C#)

ASP.NET Web API에서 JsonConverter를 이용한 커스텀 JSON 파싱 방법

코볼 2025. 4. 4. 16:11
728x90
반응형
SMALL

JsonConverter로 복잡한 JSON 파싱 커스터마이징하기 (ASP.NET Web API)

  • JsonConverter란 무엇인가요?
  • 언제 JsonConverter를 사용하나요?
  • 실전 예제 – 커스텀 구조 파싱
  • 커스텀 JsonConverter 구현 코드
  • 컨트롤러에서 적용하는 방법
  • 마무리 및 팁

 

일반적인 JSON은 JObject나 DTO로 자동 바인딩되지만,
복잡하거나 구조가 불규칙한 JSON의 경우에는 커스텀 파싱 로직이 필요합니다.
이럴 때 Json.NET에서 제공하는 JsonConverter를 상속하여 직접 변환 로직을 작성할 수 있습니다.

 

🔹 JsonConverter란?

JsonConverter는 Newtonsoft.Json에서 제공하는 추상 클래스입니다.
개발자가 JSON → 객체, 객체 → JSON 변환 과정을 직접 정의할 수 있게 해줍니다.

주로 다음 상황에 사용합니다:

  • JSON 구조가 정해지지 않았을 때
  • 속성명이 동적으로 바뀌거나 누락될 수 있을 때
  • JSON 필드를 조합해서 하나의 속성으로 만들고 싶을 때

 

🔸 예제: 비정형 JSON → 정형 모델로 파싱

📦 예시 JSON

json

{
  "data": {
    "user_id": 100,
    "info": {
      "full_name": "John Doe",
      "email": "john@example.com"
    }
  }
}

 

🎯 목표 DTO

csharp

public class UserModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
}

구조가 달라 바로 매핑할 수 없습니다. → JsonConverter가 필요합니다.

 

🔨 JsonConverter 구현

csharp

public class UserModelConverter : JsonConverter<UserModel>
{
    public override UserModel ReadJson(JsonReader reader, Type objectType, UserModel existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        JObject obj = JObject.Load(reader);
        var data = obj["data"];
        var info = data["info"];

        return new UserModel
        {
            Id = data.Value<int>("user_id"),
            Name = info.Value<string>("full_name"),
            Email = info.Value<string>("email")
        };
    }

    public override void WriteJson(JsonWriter writer, UserModel value, JsonSerializer serializer)
    {
        // 필요시 객체를 다시 JSON으로 쓰는 로직 (생략 가능)
        throw new NotImplementedException();
    }
}

 

 

🧩 DTO에 Converter 연결하기

csharp

[JsonConverter(typeof(UserModelConverter))]
public class UserModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
}

 

또는 직접 수동으로 읽어올 경우:

csharp

public IHttpActionResult Save([FromBody] JObject json)
{
    var user = json.ToObject<UserModel>(new JsonSerializer
    {
        Converters = { new UserModelConverter() }
    });

    return Ok(user);
}

 

 

 

🧪 결과

입력:

json

{
  "data": {
    "user_id": 100,
    "info": {
      "full_name": "John Doe",
      "email": "john@example.com"
    }
  }
}

 

출력:

json

{
  "Id": 100,
  "Name": "John Doe",
  "Email": "john@example.com"
}

 

 

 

✅ JsonConverter 활용 팁

상황 활용 방식
다형성 처리 (타입에 따라 구조 달라지는 JSON) JsonConverter 필수
일부 필드만 선택적으로 매핑 커스텀 ReadJson에서 조건 처리
JSON 속성명 → C# 속성명 불일치 JsonProperty 또는 Converter 사용 가능

 

 

 

✅ 결론

ASP.NET Web API에서 JsonConverter를 활용하면 복잡하고 유연한 JSON 구조도 깔끔하게 원하는 DTO로 변환할 수 있습니다.
정형화되지 않은 JSON을 처리해야 하는 경우, 단순한 JObject 처리보다 훨씬 유지보수에 유리한 방법입니다.

JsonConverter는 고급 기술이지만, 한 번 익숙해지면 실무에서 정말 강력한 도구가 됩니다.

 

 

 

 

📌 도움이 되셨다면 댓글 혹은 좋아요로 응원해주세요!
질문은 언제든지 환영입니다 😊

728x90
반응형
LIST
Comments