JSON to C# 클래스 변환
JSON에서 C# 클래스 생성
JSON 입력
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 to C# 활용 사례
JSON to C# 타입 매핑 참조
각 JSON 값 타입은 특정 C# 타입에 매핑됩니다. 생성기는 실제 값을 분석하여 가장 정확한 타입을 선택합니다. 예를 들어 소수점이 없는 JSON 숫자는 int가 되고, 3.14는 double이 됩니다. null 값은 null만으로는 실제 타입을 추론할 수 없으므로 object?(nullable 참조 타입)를 생성합니다.
| JSON 타입 | 예시 값 | C# 타입 |
|---|---|---|
| string | "hello" | string |
| number (int) | 42 | int |
| number (float) | 3.14 | double |
| boolean | true, false | bool |
| null | null | object? |
| 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을 사용하는 경우 속성을 교체할 수 있습니다.
코드 예제
이 예제들은 JSON에서 생성된 C# 클래스를 두 가지 주요 직렬화 라이브러리를 사용하여 정의하고 사용하는 방법과, 커맨드 라인에서 생성을 자동화하는 방법을 보여줍니다.
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; }
}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; }
}// 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; }
// }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))