본문으로 건너뛰기
🛠️ToolsShed

JSON to C# Class

JSON을 속성, 데이터 주석, Newtonsoft 속성이 포함된 C# POCO 클래스 정의로 변환합니다.

이 도구 소개

JSON to C# Class는 JSON 데이터 구조를 C# POCO(Plain Old CLR Object) 클래스 정의로 자동 변환하는 개발자 도구입니다. .NET 애플리케이션에서 API, 설정 파일 또는 외부 데이터 소스를 다룰 때 강하게 타입이 지정된 C# 클래스를 보유하면 타입 안정성이 보장되고 Visual Studio에서 IntelliSense 자동 완성이 가능합니다. 이 도구는 JSON을 분석하고 프로덕션 환경 대응의 C# 코드를 생성하여 클래스를 수동으로 정의하는 번거로운 작업을 제거합니다.

JSON 객체를 입력 필드에 붙여넣고 변환 버튼을 클릭하기만 하면 됩니다. 도구가 구조를 분석하고 데이터 타입을 감지하며 중첩된 객체와 배열을 처리하고 적절한 속성 타입, 직렬화를 위한 Newtonsoft.Json 속성, 선택적 nullable 주석이 있는 C# 클래스를 생성합니다. 생성된 클래스는 .NET 프로젝트에 바로 복사하여 사용할 수 있으며 Newtonsoft.Json(Json.NET) 또는 System.Text.Json과 같은 인기 있는 JSON 라이브러리와 호환됩니다.

특히 REST API 통합, 설정 파일 처리 또는 C#에서 API 응답 역직렬화를 수행하는 개발자에게 유용합니다. 생성된 코드는 중첩된 객체, 선택적 속성, 사용자 정의 속성 매핑을 지원하므로 프레임워크 버전과 최신 .NET 애플리케이션 모두와 호환됩니다.

자주 묻는 질문

코드 구현

import json
from typing import Any

def to_pascal_case(s: str) -> str:
    return ''.join(w.capitalize() for w in s.replace('-', '_').split('_'))

def cs_type(value: Any, key: str) -> str:
    if isinstance(value, bool):
        return "bool"
    if isinstance(value, int):
        return "int"
    if isinstance(value, float):
        return "double"
    if isinstance(value, str):
        return "string"
    if isinstance(value, list):
        if value:
            return f"List<{cs_type(value[0], key)}>"
        return "List<object>"
    if isinstance(value, dict):
        return to_pascal_case(key)
    return "object"

def generate_classes(data: dict, class_name: str, classes: list) -> None:
    props = []
    for k, v in data.items():
        prop_name = to_pascal_case(k)
        type_str = cs_type(v, k)
        if type_str == "string":
            type_str = "string?"
        props.append(f'    [JsonProperty("{k}")]')
        props.append(f'    public {type_str} {prop_name} {{ get; set; }}')
        if isinstance(v, dict):
            generate_classes(v, prop_name, classes)
    classes.append(f"public class {class_name}\n{{\n" + "\n".join(props) + "\n}")

json_str = '{"name": "Alice", "age": 30, "active": true}'
data = json.loads(json_str)
classes = []
generate_classes(data, "Root", classes)
print("\n\n".join(classes))

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.