일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 업비트
- python
- league of legends
- upbit
- Banker's
- .csv
- 일본여행
- swift 화면전환
- Excel
- 초딩수학
- MS-SQL
- chart.js
- 썸머노트
- AIoptimization
- 한글깨짐
- PromptEngineering
- Banker's rounding
- Aspose.cells
- LEFT JOIN
- largelanguagemodels
- 오블완
- rounding
- Oracle
- Kakao API Address
- MSSQL
- CSV
- 나만의 상점
- Android
- MYSQL
- Request.Form
- Today
- Total
DBA
ASP.NET Web API에서 JObject와 JArray를 함께 사용하는 고급 JSON 처리법 + DTO 변환까지 본문
ASP.NET Web API에서 JObject와 JArray를 함께 사용하는 고급 JSON 처리법 + DTO 변환까지
코볼 2025. 4. 4. 15:24
JObject와 JArray를 활용한 ASP.NET Web API JSON 고급 처리
- JArray란 무엇인가요?
- 복합 JSON 구조 예제 – JObject + JArray
- 실전 코드 예제 – 설정 값과 배열 함께 받기
- JObject를 DTO로 변환하는 방법
- 마무리 및 사용 시 유의사항
ASP.NET Web API에서는 단일 JSON 객체를 받을 때 [FromBody] JObject를 활용할 수 있습니다.
그런데 요청 데이터가 다음과 같이 객체 + 배열 구조로 복합적이라면 어떻게 처리해야 할까요?
json
{
"settings": {
"theme": "dark",
"language": "ko"
},
"items": [
{ "id": 1, "name": "apple" },
{ "id": 2, "name": "banana" }
]
}
이 글에서는 위와 같은 구조를 처리하기 위해 JObject와 JArray를 조합하여 다루는 방법과, 받은 JObject를 DTO 객체로 변환하는 팁까지 소개합니다.
🔹 JArray란?
JArray는 Newtonsoft.Json에서 제공하는 JSON 배열을 표현하는 객체입니다.
일반적인 List<object> 같은 개념이며, JObject와 조합해 계층형 구조도 표현할 수 있습니다.
csharp
JArray items = (JArray)jObject["items"];
🔸 복합 JSON 구조 예제
요청 JSON:
json
{
"settings": {
"theme": "dark",
"language": "ko"
},
"items": [
{ "id": 1, "name": "apple" },
{ "id": 2, "name": "banana" }
]
}
컨트롤러 메서드:
csharp
[HttpPost]
public IHttpActionResult SaveData([FromBody] JObject data)
{
// settings 추출
JObject settings = data.Value<JObject>("settings");
string theme = settings.Value<string>("theme");
string language = settings.Value<string>("language");
// items 배열 추출
JArray items = data.Value<JArray>("items");
List<string> itemNames = new List<string>();
foreach (JObject item in items)
{
string name = item.Value<string>("name");
itemNames.Add(name);
}
return Ok(new
{
Theme = theme,
Language = language,
Items = itemNames
});
}
🔸 JObject → DTO(모델 클래스)로 변환하는 방법
모델 클래스 정의:
csharp
public class SettingModel
{
public string Theme { get; set; }
public string Language { get; set; }
}
public class ItemModel
{
public int Id { get; set; }
public string Name { get; set; }
}
public class CompositeModel
{
public SettingModel Settings { get; set; }
public List<ItemModel> Items { get; set; }
}
JObject를 DTO로 변환:
csharp
[HttpPost]
public IHttpActionResult SaveComposite([FromBody] JObject data)
{
var model = data.ToObject<CompositeModel>();
// model.Settings.Theme, model.Items.Count 등 활용 가능
return Ok(new
{
Message = "변환 성공",
Theme = model.Settings.Theme,
FirstItem = model.Items[0].Name
});
}
✔ ToObject<T>()는 Json.NET에서 지원하는 매우 강력한 기능으로, 동적 JSON을 DTO에 자동으로 맵핑해줍니다.
✅ 언제 이렇게 쓸까?
상황 | 추천 방식 |
데이터 구조가 복잡하고 유동적일 때 | JObject, JArray 직접 다루기 |
구조가 정해져 있고 타입 안정성이 필요할 때 | DTO 변환 (ToObject<T>()) |
구조 일부만 파싱하고 싶을 때 | JObject에서 필요한 부분만 추출 |

⚠️ 사용 시 유의사항
- DTO 변환 시, JSON 구조와 DTO 속성명이 정확히 일치해야 함
- JArray는 인덱스로도 접근 가능하지만 foreach를 더 안전하게 사용
- 너무 복잡한 JObject 처리는 오히려 디버깅을 어렵게 만들 수 있음 → 가능한 DTO 활용 권장

✅ 결론
ASP.NET Web API에서 JObject와 JArray를 조합하면, 구조가 복잡하거나 예측 불가능한 JSON 데이터를 유연하게 처리할 수 있습니다.
또한 필요에 따라 ToObject<T>() 메서드를 통해 정적 타입으로의 변환도 가능하므로, 다양한 방식으로 JSON 데이터를 다룰 수 있는 여지가 넓습니다.
이 기능들을 적절히 활용하면, 동적 데이터 처리와 정형 데이터 처리의 균형을 잘 유지할 수 있습니다.

📌 이 글이 도움이 되셨다면 댓글과 공유 부탁드립니다.
추가로 “JsonConverter를 사용한 커스텀 파싱” 편도 준비 중입니다. 기대해주세요 😊