logo
GeekFormat

JSON에서 C#로

무료 온라인 JSON에서 C#로 도구. API 응답이나 구성 JSON을 원클릭으로 ASP.NET Core, Unity, Blazor, .NET MAUI 프로젝트에서 직접 사용할 수 있는 표준 C# 클래스로 변환합니다. [JsonProperty] 어노테이션, List 제네릭, Nullable<T>, 중첩 클래스 자동 분할을 지원하며 완전히 브라우저 로컬에서 생성합니다.

관련 추천

JSON에서 C#로 정보: JSON 데이터를 컴파일 가능한 C# POCO 클래스로 변환

JSON에서 C#는 JSON 형식의 데이터(객체 또는 배열)를 C# 클래스 정의(POCO, Plain Old CLR Object)로 변환하는 프로세스입니다. C#은 .NET 생태계의 주력 언어로 ASP.NET Core 백엔드, Unity 게임, .NET MAUI 크로스플랫폼 앱, Blazor WebAssembly, 데스크톱 앱(WPF/WinForms), Azure 클라우드 서비스 등의 시나리오에서 널리 사용됩니다. 개발 중 API 문서나 실제 응답의 JSON 샘플을 C# 타입으로 변환해야 할 때가 자주 있습니다. 수동으로 클래스를 작성하는 것은 반복 작업이 많을 뿐만 아니라 필드 타입과 어노테이션을 잘못 작성하기 쉽기 때문에 본 도구는 이 프로세스를 자동화하는 것을 목표로 합니다.

본 도구는 quicktype-core를 기반으로 브라우저 로컬에서 실행되며, C# 렌더러를 사용하여 표준 POCO 클래스 코드를 생성합니다. 기본 출력에는 using System.Collections.Generic;와 [JsonProperty("원본 key")] 어노테이션(Newtonsoft.Json 호환 모드)이 포함되어 Visual Studio에서 직접 열어 컴파일할 수 있습니다. 이는 단순한 타입 초안이 아니라 .NET 프로젝트에 배치하고 NuGet 패키지와 함께 사용하면 바로 사용할 수 있는 C# 클래스입니다.

타입 추론은 JSON에서 C#의 핵심입니다. 도구는 JSON의 기본 타입을 .NET 표준 타입으로 매핑합니다: 문자열 → string, 정수 → long, 부동소수점 → double, 불리언 → bool, 배열 → List<T>, 중첩 객체 → 독립된 class, null 값 → Nullable<T>(예: long? / bool? / string?). 중첩 객체에 대해 도구는 자동으로 각 계층에 새 class를 생성하고 필드명 첫 글자 대문자로 명명합니다. 예를 들어 address 필드는 Address 클래스를 생성하고 items 배열의 객체는 Item 클래스를 생성합니다.

현대 C# 구문과의 통합: 본 도구는 기본적으로 직렬화 가능한 POCO(퍼블릭 { get; set; } 속성)를 생성합니다. 불변성을 중시하는 프로젝트의 경우 개발자는 class를 C# 9+ record 타입으로 변경하고 { get; set; }를 init 전용 속성(public string Name { get; init; })으로 변경할 수 있습니다. JsonSerializer.Deserialize<T>(jsonString)와 함께 사용하면 컴파일 타임에 데이터가 수정되지 않음을 보장할 수 있습니다. 이는 ASP.NET Core 7+ Minimal API, Entity Framework Core 8+ 불변 엔티티 설계 트렌드와 일치합니다.

JSON을 서버에 업로드하여 처리해야 하는 일부 온라인 도구와 달리 본 도구의 모든 계산은 브라우저 내에서 완료됩니다. quicktype-core는 Web Worker를 통해 로드 및 실행되며, JSON 파싱, 타입 추론, C# 코드 생성, 파일 다운로드는 모두 로컬에서 수행되어 어떤 서버에도 데이터를 전송하지 않습니다. 이는 API 키, 사용자 개인정보 필드, 공개되지 않은 비즈니스 구조가 포함된 JSON에 특히 중요하며 페이지를 닫으면 데이터가 메모리에서 삭제됩니다.

주의할 점은 자동 생성된 코드는 출발점이지 종착점이 아니라는 것입니다. 도구는 JSON 샘플을 기반으로 타입을 추론하므로 비즈니스상 정확한 타입(예: URL, Email, ID 등 의미적 타입은 모두 string으로 추론됨)을 판단할 수 없습니다. snake_case JSON 필드의 경우 C# 필드는 PascalCase 명명(user_name → UserName)을 유지하지만 [JsonProperty("user_name")] 어노테이션은 원본 key를 유지하여 역직렬화 시 자동 매핑됩니다. 생성 결과를 첫 번째 초안으로 취급하고 프로젝트 사양에 따라 필드명, 타입, 특성을 미세 조정할 것을 권장합니다.

사용 사례

  • ASP.NET Core Web API: OpenAPI/Swagger 문서의 샘플 JSON을 DTO 클래스로 변환, [FromBody] 모델 바인딩과 함께 프론트엔드 요청 수신
  • ASP.NET Core MVC: 폼/JSON 요청 본문을 강한 타입 Model로 변환, ModelState 자동 검증과 함께 사용
  • Newtonsoft.Json 역직렬화: 타사 인터페이스 응답 JSON을 [JsonProperty]가 있는 POCO 클래스로 변환, 수동 필드 매핑 불필요
  • System.Text.Json 고성능 시나리오: JSON을 record 타입 또는 init 전용 속성으로 변환, JsonSerializer.Deserialize<T>와 함께 시작 속도 향상
  • Unity 게임 스크립트: 네트워크 API에서 반환되는 JSON(플레이어 데이터, 레벨 구성, 상점 아이템, 랭킹)을 직렬화 가능한 ScriptableObject 데이터 모델로 변환
  • .NET MAUI 크로스플랫폼 앱: 백엔드 API JSON을 Model 클래스로 변환, XAML 데이터 바인딩에서 사용, iOS/Android/Windows에서 비즈니스 모델 공유
  • Blazor Server / WebAssembly: API JSON을 강한 타입 컴포넌트 매개변수/서버 모델로 변환, @inject HttpClient와 함께 프론트엔드/백엔드 공유 타입 소비
  • Entity Framework Core: 데이터베이스에서 내보낸 JSON 문서를 엔티티 클래스로 변환, EF Core 모델 마이그레이션의 참조 기본 클래스로 사용, [Key]/[Required] 등 데이터 어노테이션과 함께 사용
  • Azure Functions / AWS Lambda: Event Grid/SNS/API Gateway/Cosmos DB 트리거 이벤트의 JSON을 강한 타입 이벤트 매개변수로 변환, 서버리스 함수 시그니처 간소화
  • SignalR 실시간 통신: 서버에서 푸시되는 JSON 메시지(채팅, 알림, 시세, IoT 데이터)를 C# 타입으로 변환, Hub 메서드에서 강한 타입으로 소비
  • 마이크로서비스 인터페이스 계약: 서비스 간 RPC(gRPC-Web/HTTP/WCF)의 JSON 요청/응답 샘플을 C# 클래스로 변환, 다중 팀 공유 계약 정의로 사용
  • 구성 파일 로드: appsettings.json 하위 구조를 Options 패턴 클래스로 변환(예: MyOptions : IOptions<MyOptions>를 IConfiguration.Bind와 함께 사용)
  • 테스트 데이터 준비: JSON 픽스처를 C# 클래스로 변환한 후 Newtonsoft/System.Text.Json으로 역직렬화하여 유닛 테스트 주도, xUnit/NUnit/MSTest와 함께 사용
  • 크롤러 데이터 파싱: HtmlAgilityPack/AngleSharp/PuppeteerSharp로 수집한 JSON 데이터를 C# 클래스로 변환, JObject 동적 접근으로 인한 필드 누락 방지
  • API 문서 작성: Swagger/OpenAPI 문서, ReDoc, Knife4j, Swagger UI에 C# 클래스 샘플을 schema 정의로 포함하여 문서 가독성 향상
  • 코드 리뷰 협업: API 응답 JSON을 직접 읽기 쉬운 POCO로 변환, Code Review 시 필드 명명, 타입 선택, 어노테이션 사용에 대해 논의하기 쉽게
  • 기존 프로젝트 리팩토링: JObject/Dictionary<string, object> 기반 동적 접근을 POCO 기반 강한 타입 접근으로 리팩토링하여 컴파일 타임 타입 검사와 유지보수성 향상
  • 교육 및 훈련: C# 과정, .NET 입문 교육에서 샘플 JSON을 POCO로 변환하여 객체 지향 모델링, 속성 접근자, 직렬화 원리 시연

이용 방법

  1. 왼쪽 에디터에 JSON 내용을 붙여넣거나 업로드 버튼을 클릭하여 .json/.txt 파일을 선택하거나 샘플 버튼을 클릭하여 내장 데이터를 로드합니다
  2. 400ms 기다리면 자동으로 변환되어 오른쪽에 생성된 C# POCO 클래스 코드가 표시됩니다
  3. JSON 형식 오류가 있는 경우 「JSON 복구」 버튼을 클릭하여 일반적인 구문 문제를 자동 복구한 후 다시 변환합니다
  4. 「복사」 버튼을 클릭하여 단일 클래스를 클립보드에 복사하여 Visual Studio/Rider/VS Code에 붙여넣거나 「다운로드」를 클릭하여 .cs 파일로 저장합니다

주요 기능

  • 순수 브라우저 로컬 생성: JSON 파싱과 C# 코드 생성은 모두 JavaScript + quicktype-core로 브라우저 내에서 완료되며, 입력 데이터는 어떤 서버에도 업로드되지 않습니다
  • POCO + record 두 가지 형태: 기본적으로 직렬화 가능한 POCO 클래스를 생성하며, 원클릭으로 C# 9+ record 타입으로 전환 가능하여 현대 .NET 코딩 스타일에 맞춥니다
  • Newtonsoft [JsonProperty] 어노테이션: 각 필드에 자동으로 [JsonProperty("원본 key")]를 생성하여 Newtonsoft.Json 기본 동작과 호환되며, PascalCase 필드명이 역직렬화에 영향을 주지 않습니다
  • 중첩 객체 자동 분할: JSON 중첩 객체는 재귀적으로 독립된 C# 클래스로 생성되며, 필드명 첫 글자 대문자로 명명 (예: address → Address)하여 타입 중복을 피합니다
  • List 제네릭 자동 전개: JSON 배열은 자동으로 List<T>로 변환되며, T는 배열 첫 번째 항목에서 자동 추론 (["a","b"] → List<string>, [{...}] → List<Item>)
  • Nullable<T> 자동 추론: JSON null 값 필드는 자동으로 Nullable<T>로 표시 (예: long? / string? / bool?)되어 컴파일 타임에 널 참조 예외를 방지합니다
  • PascalCase 필드 명명: snake_case 입력은 자동으로 PascalCase로 변환 (예: user_name → UserName)되며, 동시에 [JsonProperty] 어노테이션은 원본 key를 유지하여 역직렬화 호환성을 유지합니다
  • 다양한 값 타입 매핑: string → string, integer → long, float → double, bool → bool, array → List<T>, null → Nullable<T>
  • 완전한 .cs 템플릿: using System.Collections.Generic; + namespace + public class + 필드 + 속성을 포함한 표준 C# 파일을 생성하여 직접 컴파일 가능
  • 복사 및 다운로드: 원클릭으로 단일 클래스를 클립보드에 복사하거나 .cs 파일로 다운로드하여 Visual Studio / Rider / VS Code에 직접 드래그 앤 드롭
  • JSON 오류 원클릭 복구: 뒤에 붙은 쉼표, 작은따옴표, 따옴표 누락 등 일반적인 형식 오류를 자동으로 복구하며, 복구 성공 후 C# 코드 생성을 계속합니다
  • 로컬 기록: localStorage 기반으로 최근 입력을 자동 저장하여 페이지를 새로고침하거나 실수로 닫은 후에도 빠르게 복원하여 편집을 계속할 수 있습니다

코드 예제

C#: Newtonsoft.Json으로 본 도구가 생성한 POCO 역직렬화

csharp

ASP.NET Core 프로젝트에서 가장 일반적인 사용법: 본 도구가 생성한 POCO를 Newtonsoft.Json으로 API 응답 역직렬화.

using Newtonsoft.Json;
using System;
using System.Net.Http;
using System.Threading.Tasks;

public class ApiClient
{
    private static readonly HttpClient _http = new HttpClient();

    // 본 도구가 생성한 POCO:
    public class User
    {
        [JsonProperty("id")]
        public long Id { get; set; }

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

        [JsonProperty("email")]
        public string Email { get; set; }

        [JsonProperty("is_active")]
        public bool? IsActive { get; set; }
    }

    public static async Task<User> GetUserAsync(int userId)
    {
        // 1) API를 호출하여 JSON 문자열 가져오기
        var json = await _http.GetStringAsync($"https://api.example.com/users/{userId}");

        // 2) 본 도구가 생성한 POCO로 역직렬화
        //    내부에서 [JsonProperty("id")] 등 어노테이션에 따라 snake_case JSON 자동 매핑
        var user = JsonConvert.DeserializeObject<User>(json);

        Console.WriteLine($"User: {user.Name} ({user.Email})");
        return user;
    }
}

C#: ASP.NET Core Controller에서 본 도구가 생성한 POCO를 사용하여 요청 수신

csharp

본 도구가 생성한 User POCO를 ASP.NET Core Controller에 배치하고 [FromBody]와 함께 프론트엔드 JSON 요청 자동 수신.

using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;

// 본 도구가 생성한 POCO(기본적으로 Newtonsoft [JsonProperty] 사용):
public class CreateOrderRequest
{
    [Newtonsoft.Json.JsonProperty("user_id")]
    public long UserId { get; set; }

    [Newtonsoft.Json.JsonProperty("items")]
    public List<OrderItem> Items { get; set; }
}

public class OrderItem
{
    [Newtonsoft.Json.JsonProperty("product_id")]
    public long ProductId { get; set; }

    [Newtonsoft.Json.JsonProperty("quantity")]
    public long Quantity { get; set; }
}

[ApiController]
[Route("api/[controller]")]
public class OrdersController : ControllerBase
{
    [HttpPost]
    public IActionResult Create([FromBody] CreateOrderRequest request)
    {
        if (request == null || request.Items == null || !request.Items.Any())
        {
            return BadRequest("Items cannot be empty");
        }

        // 비즈니스 로직: 주문 저장
        // var order = OrderService.Create(request);

        return Ok(new { order_id = 12345, status = "created" });
    }
}

/*
 * 해당 .csproj 종속성:
 * <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.0" />
 * <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
 */

C#: HttpClient.GetFromJsonAsync + System.Text.Json으로 역직렬화

csharp

.NET 5+/.NET 7+ 권장 사용법: System.Text.Json 내장 확장 메서드 + record 타입 사용, [JsonPropertyName] 어노테이션과 함께 사용.

using System.Net.Http.Json;
using System.Text.Json.Serialization;
using System.Threading.Tasks;

// 본 도구는 기본적으로 POCO class를 생성; 다음과 같이 수동으로 record 타입(불변 데이터 전달 객체)으로 변경:
public record User
{
    [JsonPropertyName("id")]
    public long Id { get; init; }

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

    [JsonPropertyName("email")]
    public string Email { get; init; }

    [JsonPropertyName("is_active")]
    public bool? IsActive { get; init; }
}

public class ApiClient
{
    private static readonly HttpClient _http = new HttpClient();

    public static async Task<User> GetUserAsync(int userId)
    {
        // System.Text.Json: GetFromJsonAsync가 HTTP + 역직렬화를 한 줄로 완료
        var user = await _http.GetFromJsonAsync<User>(
            $"https://api.example.com/users/{userId}");

        System.Console.WriteLine($"User: {user.Name} ({user.Email})");
        return user;
    }
}

/*
 * 해당 .csproj 종속성(System.Text.Json은 내장되어 있어 추가 설치 불필요):
 * <TargetFramework>net7.0</TargetFramework>
 *
 * 프로젝트가 .NET 7+이고 [JsonProperty] Newtonsoft 구문과 호환시키고 싶은 경우
 * Program.cs에 다음을 추가할 수 있습니다:
 *   builder.Services.AddControllers()
 *       .AddNewtonsoftJson(options =>
 *       {
 *           options.SerializerSettings.ContractResolver =
 *               new Newtonsoft.Json.Serialization.DefaultContractResolver();
 *       });
 */

Best Practices

.csproj에 <Nullable>enable</Nullable>를 추가하면 본 도구가 생성하는 string? / List<User>? 등 널 가능 타입이 자동으로 컴파일 타임 널 검사를 받아 NullReferenceException 런타임 크래시를 방지할 수 있습니다.

본 도구는 JSON 필드를 자동으로 PascalCase로 변환(예: user_name → UserName)하며, 동시에 [JsonProperty] 어노테이션에 원본 key를 유지합니다. 이를 통해 코드는 .NET 공식 명명 규칙을 준수하고 역직렬화는 JSON 원본 key로 계속 작동합니다.

중첩 수준이 4계층을 넘는 경우 루트 객체를 여러 독립 POCO로 분할하여 각기 다른 비즈니스 영역(예: UserDto / OrderDto / PaymentDto)을 담당하게 할 것을 권장합니다. 하나의 거대한 클래스에 모든 필드를 포함하는 것을 피하고 유지보수성을 높입니다.

본 도구로 생성한 POCO를 EF Core Entity와 API DTO로 동시에 사용하지 마세요. 권장: ①API 계층은 DTO 사용(JSON에서 생성); ②EF Core 계층은 Entity 사용([Key]/[Required] 등 데이터 어노테이션을 수동으로 추가); ③AutoMapper/Mapster로 DTO ↔ Entity 매핑 수행. 데이터베이스 구조를 프론트엔드에 직접 노출하는 것을 피합니다.

프로젝트에서 System.Text.Json을 사용하는 경우 IDE 전역 바꾸기로 생성된 [JsonProperty("xxx")]를 [JsonPropertyName("xxx")]로 변경할 것을 권장합니다. 또는 원본 [JsonProperty]를 유지 + Microsoft.AspNetCore.Mvc.NewtonsoftJson 패키지를 설치하고 AddNewtonsoftJson()을 호출하여 Newtonsoft 구문과 호환시킬 수도 있습니다.

본 도구의 모든 계산은 브라우저 로컬에서 완료되지만 기업 내에서 추가 방어 계층을 권장합니다: ①프로덕션 데이터베이스 연결 문자열/API 마스터 키가 포함된 JSON을 어떤 온라인 도구에도 복사하지 않음; ②내부 POCO 생성은 NSwag 또는 Visual Studio JSON을 클래스로 붙여넣기를 사용하여 완전 오프라인으로 생성할 것을 권장; ③마스킹 후 샘플 JSON에 대해서만 온라인 도구 사용.

1MB를 초과하는 JSON은 브라우저에서 렌더링이 느려집니다. 권장: ①여러 독립 POCO 클래스(예: User.cs / Address.cs / Order.cs)로 분할하여 비즈니스 모듈별로 분류; ②초대형 JSON Schema(100+ 필드)는 NSwag 또는 Visual Studio 내장 기능으로 직접 생성; ③본 도구는 중소형 API 응답(< 100 필드) 처리에만 사용.

수정할 필요가 없는 DTO/응답 모델의 경우 생성된 class를 C# 9+ record로 변경하고 { get; set; }를 { get; init; }로 변경할 것을 권장합니다. 이를 통해: ①컴파일 타임에 데이터가 수정되지 않음을 보장; ②값 동등성 비교(Equals/GetHashCode) 자동 획득; ③with 식과 함께 객체 복사를 간소화할 수 있습니다.

자주 묻는 질문

JSON을 C# 클래스로 어떻게 변환하나요?

왼쪽 입력 상자에 JSON 내용을 붙여넣으면 도구가 400ms 이내에 quicktype-core를 통해 자동으로 C# 클래스를 호출하여 생성하고 오른쪽에 완전한 코드를 표시합니다. 「업로드」 버튼을 클릭하여 .json/.txt 파일을 선택하거나 「샘플」을 클릭하여 내장 데이터를 로드할 수도 있습니다. 생성 후 「복사」 버튼을 클릭하여 단일 클래스를 클립보드에 복사하거나 .cs 파일로 다운로드할 수 있습니다.

생성된 C# 코드에 [JsonProperty] 어노테이션이 포함되나요?

포함됩니다. 도구는 기본적으로 Newtonsoft.Json 호환 모드를 사용하여 각 필드에 [JsonProperty("원본 key")] 특성을 자동으로 추가합니다. 이를 통해 필드명이 PascalCase로 변환되어도 역직렬화 시 원본 JSON 키로 올바르게 매핑됩니다. System.Text.Json을 사용하는 경우 생성 후 [JsonProperty]를 [JsonPropertyName]으로 변경하거나 (의미는 동일), System.Text.Json 기본 명명 정책을 직접 사용할 수 있습니다 ([JsonPropertyName]은 System.Text.Json에서도 커스텀 JsonNamingPolicy로 처리할 수 있습니다).

POCO 클래스와 record 타입 중 어느 것을 생성할 수 있나요?

기본적으로 직렬화 가능한 POCO 클래스({ get; set; } 속성 포함)를 생성합니다. 프로젝트에서 C# 9+ record 타입(불변 데이터 전달 객체, DTO/불변 모델에 적합)을 사용하는 경우 생성 후 수동으로 class를 record로 변경하고 { get; set; }를 init 전용 속성(public string Name { get; init; })으로 변경할 수 있습니다. record 타입은 ASP.NET Core 7+ Minimal API와 Entity Framework Core에서 널리 사용됩니다.

어떤 JSON 데이터 구조를 지원하나요?

모든 유효한 JSON 구조를 지원합니다: 기본 타입(null, boolean, number, string), 배열(1차원 또는 다차원), 중첩 객체(임의 깊이). 루트 입력은 JSON 객체 또는 JSON 배열일 수 있으며, JSON 객체는 public class Root를 생성하고 JSON 배열은 public class Root : List<Item>을 생성합니다. JavaScript 고유 값(함수, Symbol, undefined, Date 객체 등)은 지원하지 않습니다.

JSON 필드 타입은 C# 타입에 어떻게 매핑되나요?

문자열 → string, 정수 → long, 부동소수점 → double, 불리언 → bool, 배열 → List<T>, 중첩 객체 → 독립된 class, null 값 필드 → Nullable<T>(예: long? / bool? / string?). 자세한 매핑 규칙은 페이지 하단의 「JSON 타입에서 C# 타입으로 매핑 속참표」를 참조하세요.

null 필드는 자동으로 Nullable<T>를 생성하나요?

네. 도구는 JSON에서 명시적으로 null이거나 누락된 필드를 감지하여 자동으로 Nullable<T> 형식(예: long? Id { get; set; })으로 생성합니다. 이는 C# 8+에서 도입된 Nullable Reference Types(NRT) 기능과 일치하며, 컴파일러가 정적 분석 시 널 참조 위험을 발견하는 데 도움을 줍니다. 참고: NRT를 활성화한 경우 참조 타입은 기본적으로 널이 아니므로 널 가능을 표시하려면 명시적으로 string?로 작성해야 합니다.

배열은 List<T>로 변환되나요?

네. JSON 배열은 통일적으로 C# List<T>로 변환되며, 요소 타입은 배열 첫 번째 항목에서 자동 추론됩니다. 문자열 배열 → List<string>, 정수 배열 → List<long>, 객체 배열 → List<Item>. 빈 배열 []은 요소 타입을 추론할 수 없으므로 기본적으로 List<object>를 생성하며, 생성 후 구체적인 타입(예: List<MyClass>)으로 수동 변경하는 것을 권장합니다. T[] 배열 구문을 선호하는 경우 생성 후 IDE의 찾기 및 바꾸기로 일괄 교체할 수 있습니다.

중첩 객체는 어떻게 처리되나요?

도구는 각 중첩 객체에 대해 독립된 C# 클래스를 생성합니다. 명명 규칙은 필드명 첫 글자 대문자입니다(예: address → Address). 루트 객체에 items 배열이 포함되고 요소가 객체인 경우 public class Item 클래스를 생성한 다음 public List<Item> Items { get; set; }로 참조합니다. 동일한 구조의 객체는 동일한 타입을 재사용하여 중복 정의를 피합니다.

생성된 클래스 이름과 네임스페이스를 사용자 정의할 수 있나요?

네. quicktype-core는 기본적으로 JSON 소스 이름(예: Root)을 루트 클래스 이름으로 사용합니다. 생성 후 수동으로 클래스 이름, namespace, 모든 참조 위치를 수정할 수 있습니다. 다운로드하는 .cs 파일명도 저장 시 필요에 따라 이름을 변경할 수 있습니다(예: User.cs, Order.cs로 변경).

생성된 코드를 직접 .NET 프로젝트에 넣어 사용할 수 있나요?

직접 사용할 수 있습니다. 생성된 파일은 표준 C# 구문이며 using System.Collections.Generic; 참조를 포함합니다. .cs 파일을 .NET 프로젝트의 루트 디렉터리 또는 하위 디렉터리에 배치하면 .csproj에 추가 종속성을 추가할 필요가 없습니다(System.Text.Json은 .NET에 내장되어 있습니다; Newtonsoft.Json은 NuGet을 통해 Microsoft.AspNetCore.Mvc.NewtonsoftJson 또는 Newtonsoft.Json 패키지를 설치해야 합니다). 그런 다음 JsonConvert.DeserializeObject<T>(jsonString) 또는 JsonSerializer.Deserialize<T>(jsonString)로 역직렬화할 수 있습니다.

데이터가 서버에 업로드되나요?

완전히 브라우저 로컬에서 실행됩니다. JSON 파싱, C# 코드 생성, 파일 다운로드는 모두 JavaScript + WebAssembly로 브라우저 내에서 완료됩니다. 입력된 JSON 데이터와 생성된 C# 코드는 어떤 서버에도 업로드되지 않으며, 클라우드에 기록되거나 캐시되지도 않습니다. API 키, 토큰, 공개되지 않은 비즈니스 필드가 포함된 민감한 JSON도 안심하고 사용할 수 있으며 페이지를 닫으면 삭제됩니다.

회원가입이나 로그인이 필요한가요?

필요하지 않습니다. 도구는 완전히 무료이며 회원가입, 로그인, 권한 부여가 필요 없습니다. 페이지를 열면 바로 사용할 수 있으며 모든 기능이 브라우저 로컬에서 제공됩니다.

JSON 형식 오류가 발생하면 어떻게 하나요?

도구는 JSON 유효성을 자동으로 감지하며, 오류 시 오른쪽에 빨간색 오류 메시지를 표시하고 「JSON 복구」 버튼을 제공합니다. 클릭하면 일반적인 오류를 자동으로 복구할 수 있습니다: 끝에 붙은 쉼표, 작은따옴표를 큰따옴표로 교체, 따옴표가 없는 key에 따옴표 보완, 주석 제거 등. 복구 성공 후 C# 코드 생성을 계속합니다.

Newtonsoft.Json과 System.Text.Json 중 어느 것이 더 좋나요?

둘 다 .NET 생태계에서 가장 주류인 JSON 라이브러리입니다. Newtonsoft.Json(Json.NET이라고도 함)은 역사가 가장 길고 생태계가 가장 풍부한 라이브러리로 거의 모든 .NET 프로젝트와 호환됩니다; System.Text.Json은 .NET Core 3.0+에 내장된 고성능 라이브러리로 시작이 빠르고 메모리 사용량이 적으며 AOT 친화적입니다. ASP.NET Core 3.0+는 기본적으로 System.Text.Json을 사용합니다; 기존 .NET Framework 프로젝트와 많은 타사 라이브러리는 기본적으로 Newtonsoft.Json에 의존합니다. 본 도구는 기본적으로 [JsonProperty]를 생성하여 둘 다와 호환되도록 합니다(System.Text.Json은 .NET 7+에서 Newtonsoft 호환 패키지 Microsoft.AspNetCore.Mvc.NewtonsoftJson도 지원합니다).

JSON에서 Java, JSON에서 Rust와의 차이점은 무엇인가요?

셋 다 JSON을 대상 언어의 타입 정의로 변환하지만 출력 형태가 다릅니다: JSON에서 C#은 [JsonProperty] 어노테이션이 있는 POCO 클래스를 생성하여 Newtonsoft.Json 또는 System.Text.Json과 함께 직접 역직렬화 가능; JSON에서 Java는 Lombok/Gson/Jackson 어노테이션이 있는 POJO를 생성; JSON에서 Rust는 Serde derive가 있는 struct를 생성합니다. 셋이 중점을 두는 생태계가 다르며 선택은 기술 스택에 따라 다릅니다.

DateTime 필드가 있는 클래스를 생성하여 역직렬화에 실패하면 어떻게 하나요?

System.Text.Json은 기본적으로 string과 DateTime의 자동 변환을 지원하지 않아 JsonException을 발생시킵니다. 두 가지 해결책: ① 필드에 [JsonConverter(typeof(DateTimeConverter))] 커스텀 변환기를 추가; ② Program.cs에서 전역 JsonSerializerOptions를 설정: options.PropertyNameCaseInsensitive = true;하고 커스텀 JsonConverter로 DateTime을 처리. Newtonsoft.Json은 기본적으로 DateTime 역직렬화를 지원하지만 특수 형식(Unix 타임스탬프 등)의 경우 커스텀 converter가 필요합니다.

왜 생성된 클래스에 namespace가 없나요?

도구가 기본적으로 namespace를 생성하지 않는 것은 코드 스니펫의 최대 호환성을 유지하여 사용자가 임의의 프로젝트에 복사하여 사용하기 쉽게 하기 위함입니다. namespace가 필요한 경우 생성된 코드 맨 위에 수동으로 namespace YourApp.Models;를 추가하고 클래스를 해당 .cs 파일에 배치할 수 있습니다. .NET 프로젝트에서는 기능 모듈별로 namespace를 구성할 것을 권장합니다(예: Models / Dtos / ViewModels / Entities).

Visual Studio에서 원클릭으로 클래스로 붙여넣을 수 있나요?

Visual Studio 2019+에는 「선택하여 붙여넣기 → JSON을 클래스로 붙여넣기」 기능이 내장되어 있으며(편집 메뉴 → 선택하여 붙여넣기), JSON을 직접 C# 클래스로 변환할 수 있습니다. 본 도구에서 생성된 코드는 이 기능과 호환됩니다: 도구에서 생성한 C# 코드를 클립보드에 복사한 후 임의의 .cs 파일에 붙여넣어 사용할 수 있습니다. VS 내장 기능을 선호하는 경우 본 도구를 열지 않고 직접 편집 → 선택하여 붙여넣기 → JSON을 클래스로 붙여넣기를 사용할 수 있습니다.

문제 해결

「JSON 데이터를 입력하세요」라고 표시되거나 오른쪽이 비어 있음

왼쪽 입력 상자가 비어 있거나 공백 문자만 포함되어 있습니다. 유효한 JSON 내용이 붙여넣어졌는지 확인하거나 업로드 버튼을 클릭하여 .json/.txt 파일을 선택하세요. 샘플 버튼을 클릭하여 내장 샘플을 로드할 수도 있습니다.

JSON 파싱 실패라고 표시됨

일반적인 원인: 끝에 쉼표가 붙어 있음(예: {"a":1,}), 큰따옴표 대신 작은따옴표 사용, key가 큰따옴표로 묶이지 않음, JavaScript 주석 포함. 「JSON 복구」 버튼을 클릭하면 일부 오류를 자동 복구할 수 있습니다; 그래도 실패하면 먼저 JSON 포맷터 도구로 검증하세요.

생성된 필드 타입이 충분히 정확하지 않음

도구는 JSON 샘플을 기반으로 타입을 추론하므로 예를 들어 모든 정수는 long, 모든 문자열은 string이 됩니다. int/decimal/Guid/DateTime 등 더 정확한 타입이 필요한 경우 생성 후 수동으로 필드 타입을 변경하세요. System.Text.Json은 기본적으로 DateTime을 지원하지 않으므로 [JsonConverter]로 사용자 정의해야 합니다.

null 필드가 Nullable<T>를 생성하지만 프로젝트에서 Nullable Reference Types가 활성화되지 않음

도구는 기본적으로 C# 8+ Nullable Reference Types 형식으로 생성합니다(예: string? / List<User>?). 프로젝트가 이전 버전 .NET Framework/NRT가 활성화되지 않은 경우 모든 참조 타입은 기본적으로 널 가능하므로 string?의 ?는 직접 삭제할 수 있습니다(또는 .csproj에서 <Nullable>enable</Nullable>을 활성화할 수 있습니다).

컴파일 시 Newtonsoft.Json 종속성을 찾을 수 없다고 표시됨

.csproj에 다음 PackageReference를 추가하세요: <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> </ItemGroup> 그런 다음 dotnet restore를 실행하면 NuGet이 자동으로 다운로드합니다. System.Text.Json을 사용하는 경우 설치가 필요 없습니다(.NET에 내장).

snake_case JSON 필드와 PascalCase 필드명이 일치하지 않음

도구는 JSON 필드명을 자동으로 PascalCase로 변환(예: user_name → UserName)하며, 동시에 [JsonProperty] 어노테이션에 원본 key를 유지합니다. Newtonsoft.Json은 역직렬화 시 [JsonProperty]에 따라 매핑하므로 수동으로 처리할 필요가 없습니다. System.Text.Json 기본 명명 정책을 사용하는 경우 [JsonProperty]를 [JsonPropertyName]으로 변경하거나 Program.cs에서 CamelCase 명명 정책을 설정해야 합니다.

다운로드한 .cs 파일이 프로젝트에서 컴파일 오류 발생

가능한 원인: ①.csproj에 Newtonsoft.Json/System.Text.Json 종속성이 추가되지 않음; ②클래스가 부적절한 디렉터리에 배치됨(.NET 프로젝트의 루트 디렉터리 또는 하위 디렉터리에 배치하고 해당 namespace에 맞춰야 함); ③클래스명이 프로젝트 내 다른 타입과 충돌. 해결: 종속성 추가, 디렉터리와 namespace 조정, 충돌하는 클래스 이름 변경.

ASP.NET Core에서 JSON 수신 시 「Cannot deserialize」 오류 발생

ASP.NET Core 3.0+는 기본적으로 System.Text.Json을 사용하지만 도구가 생성하는 [JsonProperty]는 Newtonsoft.Json 구문입니다. 두 가지 해결책: ①.csproj에 Microsoft.AspNetCore.Mvc.NewtonsoftJson 패키지를 추가하고 Program.cs에서 AddNewtonsoftJson() 호출; ②생성된 [JsonProperty("xxx")]를 모두 [JsonPropertyName("xxx")](System.Text.Json 구문)로 변경.

배열이 숫자 타입인데 List<object>가 생성됨

보통 배열이 비어 []인 경우 기본적으로 List<object>로 추론됩니다. 원본 JSON에 최소 하나의 샘플 요소(예: [1,2,3])를 추가하면 도구가 첫 번째 요소를 기반으로 타입을 추론합니다; 또는 생성 후 수동으로 List<object>를 List<long>/List<int>로 변경하세요.

초대형 JSON 변환 시 페이지가 멈춤

JSON을 여러 독립 모듈로 분할하여 각각 변환하거나 모델링이 필요한 부분만 추출할 것을 권장합니다. 브라우저가 많은 중첩 클래스를 렌더링할 때 많은 메모리를 소비하므로 5MB를 초과하는 JSON은 NSwag/Visual Studio 내장 「JSON을 클래스로 붙여넣기」 기능 사용을 권장합니다.

용어집

POCO (Plain Old CLR Object)
C#/.NET에서 「평범한 CLR 객체」의 약칭으로, 제약 조건은: 퍼블릭 기본 생성자 + private 필드 + 퍼블릭 { get; set; } 속성 + 프레임워크 비의존성. 본 도구가 생성하는 것은 표준 POCO입니다.
record
C# 9+에서 도입된 불변 데이터 전달 객체 타입으로, 참조 동등성이 아닌 값 동등성을 사용합니다. 본 도구에서 생성 후 수동으로 record로 변경할 수 있으며 DTO, API 응답 모델, 불변 구성 등의 시나리오에 적합합니다.
[JsonProperty]
Newtonsoft.Json의 필드 매핑 특성. 본 도구는 기본적으로 각 필드에 [JsonProperty("원본 key")]를 추가하여 PascalCase 필드명이 snake_case JSON을 올바르게 역직렬화할 수 있도록 합니다.
Newtonsoft.Json
Json.NET이라고도 하며 .NET 생태계에서 가장 인기 있는 JSON 라이브러리. 생태계가 가장 풍부하고 호환성이 가장 좋아 거의 모든 .NET 프로젝트에서 지원됩니다. ASP.NET Core 3.0 이전에는 기본으로 사용되었으며, 3.0 이후 System.Text.Json으로 변경되었지만 NuGet 패키지를 통해 계속 호환됩니다.
System.Text.Json
.NET Core 3.0+에 내장된 고성능 JSON 라이브러리. 시작이 빠르고 메모리 사용량이 적으며 AOT 친화적입니다. 기능에는 [JsonPropertyName](Newtonsoft의 [JsonProperty]에 해당)과 JsonNamingPolicy 커스텀 명명 정책이 포함됩니다.
Nullable<T>
C#에서 값 타입이 널 가능함을 나타내는 형식(예: long? / bool?). 본 도구는 JSON null 필드를 자동으로 Nullable<T>로 추론하여 컴파일 타임에 널 참조 예외를 방지합니다.
List<T>
.NET 컬렉션 프레임워크의 제네릭 리스트 타입. 본 도구는 JSON 배열을 자동으로 List<T>로 변환하며 T는 배열 첫 번째 항목에서 자동 추론됩니다(예: ["a"] → List<string>).
namespace
C#에서 클래스를 구성하기 위한 네임스페이스 키워드로, Java의 package와 유사합니다. 본 도구가 생성하는 코드는 기본적으로 namespace가 없으며 수동으로 추가할 수 있습니다(예: namespace MyApp.Models).
ASP.NET Core
마이크로소프트 오픈소스 크로스플랫폼 웹 프레임워크. 본 도구에서 생성되는 POCO 클래스는 ASP.NET Core Controller [FromBody] 모델 바인딩, Minimal API, Blazor 컴포넌트 매개변수 등의 시나리오에서 직접 사용할 수 있습니다.
Unity
세계에서 가장 인기 있는 게임 엔진으로 스크립트 언어로 C#을 사용합니다. 본 도구에서 생성되는 POCO 클래스는 Unity 네트워크 API 응답 파싱, ScriptableObject 구성 데이터 모델링에 사용할 수 있습니다.
Snake_case → PascalCase
필드 명명 규칙 변환. snake_case 명명(예: user_name, created_at)을 PascalCase 명명(예: UserName, CreatedAt)으로 변환하여 .NET 공식 명명 규칙을 준수합니다.
quicktype-core
본 도구가 기반으로 의존하는 오픈소스 다국어 JSON 타입 생성 라이브러리(quicktype 프로젝트). C#, Java, TypeScript, Rust, Go, Swift 등 10개 이상의 언어를 지원하며 TypeScript + WebAssembly 기반으로 브라우저에서 실행됩니다.
.NET MAUI
마이크로소프트 크로스플랫폼 UI 프레임워크(.NET Multi-platform App UI). C# 코드는 iOS/Android/Windows/macOS에서 공유할 수 있습니다. 본 도구에서 생성되는 POCO는 MAUI XAML 데이터 바인딩의 Model로 적합합니다.
Blazor
마이크로소프트 WebAssembly 기반 SPA 프레임워크로 Server와 WebAssembly 두 가지 모드가 있습니다. 본 도구에서 생성되는 C# 클래스는 Blazor 컴포넌트 매개변수, 강한 타입 API 응답 모델에 사용할 수 있어 단일 언어 풀스택 개발 효율을 높입니다.
HttpClient.GetFromJsonAsync
.NET 5+/System.Net.Http.Json 확장 메서드. HTTP GET + JSON 역직렬화를 한 줄로 완료합니다. 본 도구에서 생성되는 POCO와 함께 사용하면 HTTP API 클라이언트 코드를 크게 간소화할 수 있습니다.
JsonNamingPolicy
System.Text.Json에서 JSON 필드명과 C# 속성명 간의 매핑 정책을 제어하는 클래스(예: CamelCase, SnakeCaseLower). Newtonsoft.Json은 [JsonProperty] 어노테이션 또는 ContractResolver로 구현합니다.
IOptions<T>
.NET Options 패턴 핵심 인터페이스. appsettings.json 하위 구조를 강한 타입 클래스에 바인딩합니다. 본 도구에서 생성되는 POCO는 IConfiguration.Bind와 함께 IOptions<T> 구현으로 직접 사용할 수 있습니다.

JSON 타입에서 C# 타입으로 매핑 속참표

도구는 JSON 값의 타입에 따라 대응하는 C#/.NET 타입을 자동으로 추론합니다:

JSON 값 예시생성되는 C# 타입Nullable 형식설명
null컨텍스트에 따라 추론T?null 값 필드는 자동으로 Nullable<T>로 추론됩니다(예: long? / bool? / string?)
true / falseboolbool?JSON 불리언 값은 직접 C# bool에 매핑
42longlong?JSON 정수는 기본적으로 long(64비트 정수, 큰 수와 호환)에 매핑
3.14doubledouble?JSON 부동소수점은 기본적으로 double(배정밀도 부동소수점)에 매핑
"hello"stringstring?JSON 문자열은 C# string에 매핑
["a","b"]List<string>List<string>?문자열 배열은 List<string>에 매핑
[1,2,3]List<long>List<long>?정수 배열은 List<long>에 매핑
[{...},{...}]List<Item>List<Item>?객체 배열은 첫 번째 요소에서 대응하는 class를 생성한 다음 List로 래핑
[]List<object>List<object>?빈 배열은 요소 타입을 추론할 수 없으므로 object로 폴백, 생성 후 구체적인 타입으로 변경 권장
{...} 중첩 객체독립된 classClassName?중첩 객체는 독립된 class를 생성, 필드명 첫 글자 대문자로 명명(address → Address)

Newtonsoft.Json과 System.Text.Json 어노테이션 비교표

.NET 생태계 두 주류 JSON 라이브러리의 필드 매핑 특성 비교. 본 도구는 기본적으로 Newtonsoft 호환 [JsonProperty]를 생성합니다:

비교 항목Newtonsoft.JsonSystem.Text.Json
필드 매핑 특성[JsonProperty("user_name")][JsonPropertyName("user_name")]
기본 명명 정책PascalCase 필드명 유지(snake_case 호환에는 [JsonProperty] 필요)원본 필드명 유지(JSON 키로 매칭, CamelCase가 기본)
사용자 정의 명명[JsonProperty]로 필드별 지정[JsonPropertyName] + JsonNamingPolicy 전역 설정
null 값 처리NullValueHandling.Ignore / IncludeJsonIgnoreCondition.WhenWritingNull
기본 .NET 버전.NET Framework / .NET Core / .NET 5+.NET Core 3.0+ / .NET 5+
설치 방법NuGet: Newtonsoft.Json내장(설치 불필요)
성능높음(시작이 빠르고 메모리 사용량 적음)
AOT 지원source generator 필요네이티브 지원
적용 시나리오기존 .NET 프로젝트, 타사 라이브러리 의존, 생태계 풍부ASP.NET Core 3.0+, 고성능 시나리오, .NET MAUI / Blazor

Privacy & Security

본 JSON에서 C#로 도구의 모든 작업은 완전히 귀하의 브라우저 로컬에서 완료됩니다: JSON 파싱, C# 코드 생성, 파일 다운로드는 모두 브라우저 JavaScript + WebAssembly(quicktype-core)를 통해 클라이언트 측에서 실행되며 네트워크를 통해 어떤 서버에도 JSON 내용, 업로드된 파일 또는 생성된 코드를 전송하지 않습니다. 파일 업로드는 브라우저 네이티브 FileReader API를 사용하여 직접 메모리로 읽어들이며 어떤 중간 서비스도 거치지 않습니다. 쿠키 추적을 사용하지 않으며 사용자 입력 데이터나 사용 현황 데이터를 수집하지 않습니다. 페이지를 닫거나 새로고침하면 모든 입력 및 출력 내용이 자동으로 메모리에서 삭제됩니다. API 키, 토큰, 민감한 비즈니스 데이터가 포함된 JSON 처리에 적합합니다.

Authoritative References