일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 오블완
- upbit
- Oracle
- LEFT JOIN
- Android
- Request.Form
- MS-SQL
- 업비트
- chart.js
- 한글깨짐
- MSSQL
- 나만의 상점
- 초딩수학
- Excel
- MYSQL
- league of legends
- rounding
- swift 화면전환
- AIoptimization
- 썸머노트
- 일본여행
- Aspose.cells
- python
- PromptEngineering
- .csv
- Banker's
- largelanguagemodels
- Kakao API Address
- CSV
- Banker's rounding
Archives
- Today
- Total
DBA
ASP.NET Web API에서 JsonConverter를 이용한 커스텀 JSON 파싱 방법 본문
[3] Development/MVC(ASP.NET with C#)
ASP.NET Web API에서 JsonConverter를 이용한 커스텀 JSON 파싱 방법
코볼 2025. 4. 4. 16:11728x90
반응형
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