JSON to C# 클래스 변환

JSON에서 C# 클래스 생성

예시 시도
루트 클래스 이름:

JSON 입력

C# 출력

로컬에서 실행 · 시크릿 붙여넣기 안전
C# 클래스가 여기에 표시됩니다…

JSON to C# 변환이란?

JSON to C# 변환은 JSON 데이터에서 강력하게 타입이 지정된 C# 클래스 정의를 생성하는 과정입니다. .NET 애플리케이션이 API, 설정 파일, 또는 메시지 큐에서 JSON을 수신할 때, 해당 데이터를 객체로 역직렬화하기 위한 C# 클래스가 필요합니다. 특히 JSON에 중첩 객체, 배열, 혼합 타입이 포함된 경우 이 클래스를 수동으로 작성하는 것은 번거롭고 오류가 발생하기 쉽습니다.

JSON to C# 클래스 생성기는 JSON의 구조와 값을 분석하여 각 필드에 적합한 C# 타입을 추론하고, 속성 접근자와 직렬화 속성을 갖춘 클래스 정의를 생성합니다. 출력은 .NET 명명 규칙을 따릅니다: PascalCase 속성 이름, 원래의 camelCase 또는 snake_case JSON 키에 매핑하기 위한 JsonPropertyName 속성, 그리고 배열에 대한 List'<'T'>' 올바른 사용.

이 변환은 ASP.NET Core 웹 API, Azure Functions, 그리고 외부 JSON 데이터를 소비하는 모든 .NET 서비스에서 특히 일반적입니다. dynamic이나 Dictionary'<'string, object'>'를 사용하는 대신, 타입이 지정된 클래스는 컴파일 타임 안전성, IntelliSense 지원, 그리고 런타임에서야 나타날 필드 이름 오타 방지를 제공합니다. JSON을 이 도구에 붙여넣으면 바로 사용 가능한 C# 클래스를 즉시 얻을 수 있습니다.

JSON to C# 생성기를 사용하는 이유

JSON 샘플에서 C# 모델 클래스를 수동으로 작성하면 시간이 걸리고 사람의 실수가 개입됩니다. 생성기는 반복적인 부분을 처리하므로 비즈니스 로직에 집중할 수 있습니다.

즉시 클래스 생성
JSON을 붙여넣으면 1초 안에 완성된 C# 클래스를 얻습니다. 속성을 일일이 입력하거나 필드를 빠뜨릴 필요가 없습니다.
🔒
개인정보 우선 처리
모든 변환이 브라우저에서 실행됩니다. JSON 데이터가 기기 밖으로 나가지 않으므로 API 키, 토큰, 개인정보가 안전하게 보호됩니다.
📋
올바른 속성 매핑
생성된 클래스에는 PascalCase C# 속성을 원래 JSON 키 이름에 매핑하는 JsonPropertyName 속성이 포함되어 역직렬화 불일치를 방지합니다.
🌐
계정 또는 설치 불필요
페이지를 열고 JSON을 붙여넣기만 하면 됩니다. NuGet 패키지 설치, Visual Studio 확장 설정, 회원가입 양식 작성이 필요 없습니다.

JSON to C# 활용 사례

백엔드 API 연동
서드파티 REST API의 요청 및 응답 모델을 생성합니다. API 문서의 샘플 JSON을 붙여넣으면 HttpClient 호출에 바로 사용할 수 있는 C# 클래스를 얻습니다.
ASP.NET Core 컨트롤러
액션 메서드 매개변수용 모델 클래스를 생성합니다. 엔드포인트가 JSON 본문을 받을 때, 생성된 클래스는 자동 모델 바인딩과 유효성 검사를 제공합니다.
Azure Functions 및 서버리스
큐, 이벤트 허브, 또는 HTTP 트리거에서 JSON 메시지를 처리하는 Azure Functions의 입력 및 출력 바인딩을 구성합니다.
설정 역직렬화
appsettings.json 섹션이나 외부 설정 파일을 의존성 주입에서 IOptions'<'T'>'와 함께 사용하기 위한 타입이 지정된 C# 옵션 클래스로 변환합니다.
데이터베이스 시딩 및 마이그레이션
JSON 픽스처 파일을 Entity Framework 시드 데이터, 통합 테스트 설정, 또는 데이터 마이그레이션 스크립트용 C# 객체로 변환합니다.
C# 타입 시스템 학습
.NET을 처음 접하는 학생과 개발자가 JSON 타입이 C# 타입에 어떻게 매핑되는지 확인하고, 속성 접근자를 이해하며, 직렬화 속성을 예제를 통해 배울 수 있습니다.

JSON to C# 타입 매핑 참조

각 JSON 값 타입은 특정 C# 타입에 매핑됩니다. 생성기는 실제 값을 분석하여 가장 정확한 타입을 선택합니다. 예를 들어 소수점이 없는 JSON 숫자는 int가 되고, 3.14는 double이 됩니다. null 값은 null만으로는 실제 타입을 추론할 수 없으므로 object?(nullable 참조 타입)를 생성합니다.

JSON 타입예시 값C# 타입
string"hello"string
number (int)42int
number (float)3.14double
booleantrue, falsebool
nullnullobject?
object{"key": "value"}nested class
array[1, 2, 3]List<int>
array of objects[{"id": 1}]List<ClassName>

System.Text.Json vs Newtonsoft.Json

.NET에는 두 가지 주요 JSON 직렬화 라이브러리가 있습니다. 이 도구에서 생성된 클래스는 .NET Core 3.0부터 내장된 System.Text.Json 속성(JsonPropertyName)을 사용합니다. 프로젝트에서 Newtonsoft.Json을 사용하는 경우 속성을 교체할 수 있습니다.

System.Text.Json
.NET Core 3.0부터 내장되어 있습니다. Newtonsoft보다 빠르고 메모리 할당이 적습니다. 속성 매핑에 [JsonPropertyName]을 사용합니다. 새로운 .NET 6+ 프로젝트의 기본 선택입니다. JsonPath나 참조 처리 같은 모든 Newtonsoft 기능을 기본적으로 지원하지는 않습니다.
Newtonsoft.Json
원조 .NET JSON 라이브러리(Json.NET)입니다. 속성 매핑에 [JsonProperty]를 사용합니다. 더 고급 시나리오를 지원합니다: 다형성 직렬화, JsonPath 쿼리, 더 유연한 커스텀 컨버터. 레거시 코드베이스와 System.Text.Json이 지원하지 않는 기능이 필요한 프로젝트에서 여전히 흔히 사용됩니다.

코드 예제

이 예제들은 JSON에서 생성된 C# 클래스를 두 가지 주요 직렬화 라이브러리를 사용하여 정의하고 사용하는 방법과, 커맨드 라인에서 생성을 자동화하는 방법을 보여줍니다.

C# (System.Text.Json)
using System.Text.Json;

var json = """{"id": 1, "name": "Alice", "active": true}""";
var user = JsonSerializer.Deserialize<User>(json);
Console.WriteLine(user.Name); // → "Alice"

public class User
{
    [JsonPropertyName("id")]
    public int Id { get; set; }

    [JsonPropertyName("name")]
    public string Name { get; set; }

    [JsonPropertyName("active")]
    public bool Active { get; set; }
}
C# (Newtonsoft.Json)
using Newtonsoft.Json;

var json = @"{""id"": 1, ""name"": ""Alice"", ""scores"": [98, 85]}";
var user = JsonConvert.DeserializeObject<User>(json);
Console.WriteLine(user.Scores[0]); // → 98

public class User
{
    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("scores")]
    public List<int> Scores { get; set; }
}
JavaScript (quicktype)
// Install: npm install -g quicktype
// Generate C# classes from JSON:
// quicktype --lang csharp --src data.json --out Models.cs

// From stdin:
// echo '{"id": 1, "name": "Alice"}' | quicktype --lang csharp

// Output:
// public class Root
// {
//     [JsonPropertyName("id")]
//     public int Id { get; set; }
//
//     [JsonPropertyName("name")]
//     public string Name { get; set; }
// }
Python (generate C# from JSON)
import json

def json_to_csharp(data: dict, class_name: str = "Root") -> str:
    lines = [f"public class {class_name}", "{"]
    type_map = {str: "string", int: "int", float: "double", bool: "bool"}

    for key, value in data.items():
        cs_type = type_map.get(type(value), "object")
        prop = key[0].upper() + key[1:]  # PascalCase
        lines.append(f'    [JsonPropertyName("{key}")]')
        lines.append(f'    public {cs_type} {prop} {{ get; set; }}')
        lines.append('')
    lines.append("}")
    return "\n".join(lines)

data = json.loads('{"id": 1, "name": "Alice", "active": true}')
print(json_to_csharp(data))

자주 묻는 질문

JsonPropertyName과 JsonProperty의 차이는 무엇인가요?
JsonPropertyName은 내장 .NET 직렬화기인 System.Text.Json의 속성입니다. JsonProperty는 서드파티 라이브러리인 Newtonsoft.Json(Json.NET)의 속성입니다. 둘 다 C# 속성 이름을 JSON 필드 이름에 매핑하지만, 서로 다른 네임스페이스에 속하므로 호환되지 않습니다. 새로운 .NET 6+ 프로젝트에는 JsonPropertyName을, 프로젝트가 이미 Newtonsoft에 의존하고 있다면 JsonProperty를 사용하세요.
생성기는 중첩된 JSON 객체를 어떻게 처리하나요?
각 중첩 객체는 자체적인 C# 클래스가 됩니다. 부모 클래스의 속성은 중첩 클래스를 타입으로 사용합니다. 예를 들어 JSON에 "street"와 "city"를 포함한 객체를 담고 있는 "address" 필드가 있으면, 생성기는 Address 클래스를 만들고 부모 클래스에서 해당 속성을 Address 타입으로 지정합니다.
혼합 타입을 포함하는 JSON 배열은 어떻게 처리되나요?
생성기는 첫 번째 null이 아닌 요소에서 배열 요소 타입을 추론합니다. 배열에 혼합 타입(문자열과 숫자가 함께)이 포함된 경우, 생성된 타입은 List'<'object'>'로 대체됩니다. 실제로 잘 구조화된 API 응답은 단일 배열 내에서 타입을 혼용하는 경우가 드뭅니다.
생성된 클래스를 Entity Framework와 함께 사용할 수 있나요?
네, 하지만 [Key], [Required], [Column] 같은 EF 전용 어노테이션을 추가해야 합니다. 생성된 클래스는 속성 구조를 제공하므로 스캐폴드로 활용하고 그 위에 EF 설정을 추가하세요. EF는 매개변수 없는 생성자도 기대하는데, 생성된 클래스는 기본적으로 이미 이를 갖추고 있습니다.
JSON의 null 값은 C#에서 어떻게 변환되나요?
JSON null 값은 null만으로는 의도한 타입을 파악할 수 없으므로 object? 타입을 생성합니다. 생성 후에는 API 스키마에 대한 지식을 바탕으로 object?를 올바른 nullable 타입(string?, int?, 또는 특정 클래스?)으로 교체해야 합니다.
camelCase JSON이 PascalCase C# 속성으로 자동 매핑되나요?
네. 생성기는 "firstName" 같은 JSON 키를 FirstName 같은 PascalCase 속성으로 변환하고 [JsonPropertyName("firstName")] 속성을 추가합니다. 이를 통해 직렬화기가 직렬화 및 역직렬화 중에 두 명명 규칙 사이를 자동으로 매핑합니다.
C#에서 선택적 필드가 있는 JSON을 어떻게 처리하나요?
속성 타입을 nullable로 설정하고(예: string? 또는 int?) 기본값을 지정하세요. System.Text.Json에서는 JsonSerializerOptions.DefaultIgnoreCondition을 설정하여 직렬화 중에 null 값을 건너뛸 수도 있습니다. 생성기는 기본적으로 non-nullable 타입을 생성하므로, API 계약에 따라 nullable 여부를 검토하고 조정하세요.