JSON에서 C#로
아직 내용이 없습니다
무료 온라인 JSON에서 C#로 도구. API 응답이나 구성 JSON을 원클릭으로 ASP.NET Core, Unity, Blazor, .NET MAUI 프로젝트에서 직접 사용할 수 있는 표준 C# 클래스로 변환합니다. [JsonProperty] 어노테이션, List 제네릭, Nullable<T>, 중첩 클래스 자동 분할을 지원하며 완전히 브라우저 로컬에서 생성합니다.
아직 내용이 없습니다
무료 온라인 JSON에서 C#로 도구. API 응답이나 구성 JSON을 원클릭으로 ASP.NET Core, Unity, Blazor, .NET MAUI 프로젝트에서 직접 사용할 수 있는 표준 C# 클래스로 변환합니다. [JsonProperty] 어노테이션, List 제네릭, Nullable<T>, 중첩 클래스 자동 분할을 지원하며 완전히 브라우저 로컬에서 생성합니다.
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 프로젝트에서 가장 일반적인 사용법: 본 도구가 생성한 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;
}
}본 도구가 생성한 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" />
*/.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();
* });
*/.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 내용을 붙여넣으면 도구가 400ms 이내에 quicktype-core를 통해 자동으로 C# 클래스를 호출하여 생성하고 오른쪽에 완전한 코드를 표시합니다. 「업로드」 버튼을 클릭하여 .json/.txt 파일을 선택하거나 「샘플」을 클릭하여 내장 데이터를 로드할 수도 있습니다. 생성 후 「복사」 버튼을 클릭하여 단일 클래스를 클립보드에 복사하거나 .cs 파일로 다운로드할 수 있습니다.
포함됩니다. 도구는 기본적으로 Newtonsoft.Json 호환 모드를 사용하여 각 필드에 [JsonProperty("원본 key")] 특성을 자동으로 추가합니다. 이를 통해 필드명이 PascalCase로 변환되어도 역직렬화 시 원본 JSON 키로 올바르게 매핑됩니다. System.Text.Json을 사용하는 경우 생성 후 [JsonProperty]를 [JsonPropertyName]으로 변경하거나 (의미는 동일), System.Text.Json 기본 명명 정책을 직접 사용할 수 있습니다 ([JsonPropertyName]은 System.Text.Json에서도 커스텀 JsonNamingPolicy로 처리할 수 있습니다).
기본적으로 직렬화 가능한 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 구조를 지원합니다: 기본 타입(null, boolean, number, string), 배열(1차원 또는 다차원), 중첩 객체(임의 깊이). 루트 입력은 JSON 객체 또는 JSON 배열일 수 있으며, JSON 객체는 public class Root를 생성하고 JSON 배열은 public class Root : List<Item>을 생성합니다. JavaScript 고유 값(함수, Symbol, undefined, Date 객체 등)은 지원하지 않습니다.
문자열 → string, 정수 → long, 부동소수점 → double, 불리언 → bool, 배열 → List<T>, 중첩 객체 → 독립된 class, null 값 필드 → Nullable<T>(예: long? / bool? / string?). 자세한 매핑 규칙은 페이지 하단의 「JSON 타입에서 C# 타입으로 매핑 속참표」를 참조하세요.
네. 도구는 JSON에서 명시적으로 null이거나 누락된 필드를 감지하여 자동으로 Nullable<T> 형식(예: long? Id { get; set; })으로 생성합니다. 이는 C# 8+에서 도입된 Nullable Reference Types(NRT) 기능과 일치하며, 컴파일러가 정적 분석 시 널 참조 위험을 발견하는 데 도움을 줍니다. 참고: NRT를 활성화한 경우 참조 타입은 기본적으로 널이 아니므로 널 가능을 표시하려면 명시적으로 string?로 작성해야 합니다.
네. 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로 변경).
직접 사용할 수 있습니다. 생성된 파일은 표준 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 복구」 버튼을 제공합니다. 클릭하면 일반적인 오류를 자동으로 복구할 수 있습니다: 끝에 붙은 쉼표, 작은따옴표를 큰따옴표로 교체, 따옴표가 없는 key에 따옴표 보완, 주석 제거 등. 복구 성공 후 C# 코드 생성을 계속합니다.
둘 다 .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을 대상 언어의 타입 정의로 변환하지만 출력 형태가 다릅니다: JSON에서 C#은 [JsonProperty] 어노테이션이 있는 POCO 클래스를 생성하여 Newtonsoft.Json 또는 System.Text.Json과 함께 직접 역직렬화 가능; JSON에서 Java는 Lombok/Gson/Jackson 어노테이션이 있는 POJO를 생성; JSON에서 Rust는 Serde derive가 있는 struct를 생성합니다. 셋이 중점을 두는 생태계가 다르며 선택은 기술 스택에 따라 다릅니다.
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 YourApp.Models;를 추가하고 클래스를 해당 .cs 파일에 배치할 수 있습니다. .NET 프로젝트에서는 기능 모듈별로 namespace를 구성할 것을 권장합니다(예: Models / Dtos / ViewModels / Entities).
Visual Studio 2019+에는 「선택하여 붙여넣기 → JSON을 클래스로 붙여넣기」 기능이 내장되어 있으며(편집 메뉴 → 선택하여 붙여넣기), JSON을 직접 C# 클래스로 변환할 수 있습니다. 본 도구에서 생성된 코드는 이 기능과 호환됩니다: 도구에서 생성한 C# 코드를 클립보드에 복사한 후 임의의 .cs 파일에 붙여넣어 사용할 수 있습니다. VS 내장 기능을 선호하는 경우 본 도구를 열지 않고 직접 편집 → 선택하여 붙여넣기 → JSON을 클래스로 붙여넣기를 사용할 수 있습니다.
왼쪽 입력 상자가 비어 있거나 공백 문자만 포함되어 있습니다. 유효한 JSON 내용이 붙여넣어졌는지 확인하거나 업로드 버튼을 클릭하여 .json/.txt 파일을 선택하세요. 샘플 버튼을 클릭하여 내장 샘플을 로드할 수도 있습니다.
일반적인 원인: 끝에 쉼표가 붙어 있음(예: {"a":1,}), 큰따옴표 대신 작은따옴표 사용, key가 큰따옴표로 묶이지 않음, JavaScript 주석 포함. 「JSON 복구」 버튼을 클릭하면 일부 오류를 자동 복구할 수 있습니다; 그래도 실패하면 먼저 JSON 포맷터 도구로 검증하세요.
도구는 JSON 샘플을 기반으로 타입을 추론하므로 예를 들어 모든 정수는 long, 모든 문자열은 string이 됩니다. int/decimal/Guid/DateTime 등 더 정확한 타입이 필요한 경우 생성 후 수동으로 필드 타입을 변경하세요. System.Text.Json은 기본적으로 DateTime을 지원하지 않으므로 [JsonConverter]로 사용자 정의해야 합니다.
도구는 기본적으로 C# 8+ Nullable Reference Types 형식으로 생성합니다(예: string? / List<User>?). 프로젝트가 이전 버전 .NET Framework/NRT가 활성화되지 않은 경우 모든 참조 타입은 기본적으로 널 가능하므로 string?의 ?는 직접 삭제할 수 있습니다(또는 .csproj에서 <Nullable>enable</Nullable>을 활성화할 수 있습니다).
.csproj에 다음 PackageReference를 추가하세요: <ItemGroup> <PackageReference Include="Newtonsoft.Json" Version="13.0.3" /> </ItemGroup> 그런 다음 dotnet restore를 실행하면 NuGet이 자동으로 다운로드합니다. System.Text.Json을 사용하는 경우 설치가 필요 없습니다(.NET에 내장).
도구는 JSON 필드명을 자동으로 PascalCase로 변환(예: user_name → UserName)하며, 동시에 [JsonProperty] 어노테이션에 원본 key를 유지합니다. Newtonsoft.Json은 역직렬화 시 [JsonProperty]에 따라 매핑하므로 수동으로 처리할 필요가 없습니다. System.Text.Json 기본 명명 정책을 사용하는 경우 [JsonProperty]를 [JsonPropertyName]으로 변경하거나 Program.cs에서 CamelCase 명명 정책을 설정해야 합니다.
가능한 원인: ①.csproj에 Newtonsoft.Json/System.Text.Json 종속성이 추가되지 않음; ②클래스가 부적절한 디렉터리에 배치됨(.NET 프로젝트의 루트 디렉터리 또는 하위 디렉터리에 배치하고 해당 namespace에 맞춰야 함); ③클래스명이 프로젝트 내 다른 타입과 충돌. 해결: 종속성 추가, 디렉터리와 namespace 조정, 충돌하는 클래스 이름 변경.
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>로 추론됩니다. 원본 JSON에 최소 하나의 샘플 요소(예: [1,2,3])를 추가하면 도구가 첫 번째 요소를 기반으로 타입을 추론합니다; 또는 생성 후 수동으로 List<object>를 List<long>/List<int>로 변경하세요.
JSON을 여러 독립 모듈로 분할하여 각각 변환하거나 모델링이 필요한 부분만 추출할 것을 권장합니다. 브라우저가 많은 중첩 클래스를 렌더링할 때 많은 메모리를 소비하므로 5MB를 초과하는 JSON은 NSwag/Visual Studio 내장 「JSON을 클래스로 붙여넣기」 기능 사용을 권장합니다.
도구는 JSON 값의 타입에 따라 대응하는 C#/.NET 타입을 자동으로 추론합니다:
| JSON 값 예시 | 생성되는 C# 타입 | Nullable 형식 | 설명 |
|---|---|---|---|
null | 컨텍스트에 따라 추론 | T? | null 값 필드는 자동으로 Nullable<T>로 추론됩니다(예: long? / bool? / string?) |
true / false | bool | bool? | JSON 불리언 값은 직접 C# bool에 매핑 |
42 | long | long? | JSON 정수는 기본적으로 long(64비트 정수, 큰 수와 호환)에 매핑 |
3.14 | double | double? | JSON 부동소수점은 기본적으로 double(배정밀도 부동소수점)에 매핑 |
"hello" | string | string? | 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로 폴백, 생성 후 구체적인 타입으로 변경 권장 |
{...} 중첩 객체 | 독립된 class | ClassName? | 중첩 객체는 독립된 class를 생성, 필드명 첫 글자 대문자로 명명(address → Address) |
.NET 생태계 두 주류 JSON 라이브러리의 필드 매핑 특성 비교. 본 도구는 기본적으로 Newtonsoft 호환 [JsonProperty]를 생성합니다:
| 비교 항목 | Newtonsoft.Json | System.Text.Json |
|---|---|---|
필드 매핑 특성 | [JsonProperty("user_name")] | [JsonPropertyName("user_name")] |
기본 명명 정책 | PascalCase 필드명 유지(snake_case 호환에는 [JsonProperty] 필요) | 원본 필드명 유지(JSON 키로 매칭, CamelCase가 기본) |
사용자 정의 명명 | [JsonProperty]로 필드별 지정 | [JsonPropertyName] + JsonNamingPolicy 전역 설정 |
null 값 처리 | NullValueHandling.Ignore / Include | JsonIgnoreCondition.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 |
본 JSON에서 C#로 도구의 모든 작업은 완전히 귀하의 브라우저 로컬에서 완료됩니다: JSON 파싱, C# 코드 생성, 파일 다운로드는 모두 브라우저 JavaScript + WebAssembly(quicktype-core)를 통해 클라이언트 측에서 실행되며 네트워크를 통해 어떤 서버에도 JSON 내용, 업로드된 파일 또는 생성된 코드를 전송하지 않습니다. 파일 업로드는 브라우저 네이티브 FileReader API를 사용하여 직접 메모리로 읽어들이며 어떤 중간 서비스도 거치지 않습니다. 쿠키 추적을 사용하지 않으며 사용자 입력 데이터나 사용 현황 데이터를 수집하지 않습니다. 페이지를 닫거나 새로고침하면 모든 입력 및 출력 내용이 자동으로 메모리에서 삭제됩니다. API 키, 토큰, 민감한 비즈니스 데이터가 포함된 JSON 처리에 적합합니다.