JSON을 C# 클래스로

JSON 샘플을 붙여넣으면 .cs 파일에 바로 붙여넣을 수 있는 C# POCO 클래스를 얻을 수 있습니다. 적절한 형식을 선택하고, 추가 클래스 정의가 필요한 중첩 객체를 처리하며, 널 허용 참조 형식을 지원하고, 프로젝트에 따라 System.Text.Json 또는 Newtonsoft.Json 특성을 출력합니다.

JSON을 C#으로 변환하는 방법

  1. 1

    JSON 붙여넣기

    샘플 하나면 충분합니다. 여러 샘플을 제공하면 널 허용 여부와 배열 요소 형식의 추론이 향상됩니다.

  2. 2

    스타일 선택

    System.Text.Json(.NET 6 이상) 또는 Newtonsoft.Json(레거시). camelCase JSON의 경우 PascalCase 속성 이름에 `[JsonPropertyName]`을 붙입니다.

  3. 3

    대상 C# 버전 선택

    레코드와 파일 범위 네임스페이스에는 C# 10 이상, 널 허용 참조 형식에는 C# 8, 최대한의 호환성을 위해서는 그 이전 버전을 사용합니다.

  4. 4

    클래스 복사

    루트 클래스 하나와 각 객체 형태에 대한 중첩 클래스가 모두 한 파일에 담겨 있어, 프로젝트에 바로 넣을 수 있습니다.

출력 예시

다음 입력에 대해:

{ "firstName": "Alice", "age": 30, "emails": ["a@a.com"], "address": { "city": "Madrid" } }

System.Text.Json 출력(C# 10 이상):

public class User
{
    [JsonPropertyName("firstName")]
    public string FirstName { get; set; } = default!;

    [JsonPropertyName("age")]
    public int Age { get; set; }

    [JsonPropertyName("emails")]
    public List<string> Emails { get; set; } = new();

    [JsonPropertyName("address")]
    public Address Address { get; set; } = default!;
}

public class Address
{
    [JsonPropertyName("city")]
    public string City { get; set; } = default!;
}

형식 매핑

JSON C# 형식
문자열 string
정수 int(int.MaxValue를 초과하면 long)
숫자(소수) double(선택 시 decimal)
불리언 bool
null object?(또는 같은 수준의 요소와 병합)
ISO-8601 날짜 DateTime(또는 DateOnly)
GUID 형태의 문자열 Guid
문자열 배열 List<string>
객체 중첩 클래스

특성 옵션

  • System.Text.Json([JsonPropertyName("foo")]). NET 6 이상 및 신규 프로젝트에 권장됩니다.
  • Newtonsoft.Json([JsonProperty("foo")]), 레거시 프로젝트나 Newtonsoft 고유 기능이 필요할 때 사용합니다.
  • 없음, 속성 이름이 JSON 키와 정확히 일치합니다(JSON 키가 이미 PascalCase인 경우에만 동작합니다).

흔한 실수

  • 오버플로 가능성이 있는 필드에 int 사용. JSON에 int.MaxValue를 초과하는 값이 있으면 long을 사용하세요. 생성기는 큰 값을 감지하면 자동으로 승격합니다.
  • 계산 속성에 [JsonIgnore] 누락. 생성된 클래스에 헬퍼 속성을 추가한다면 [JsonIgnore]로 표시하세요. 그렇지 않으면 출력 시 직렬화됩니다.
  • 문화권 독립적 파싱 잊기. decimal 필드는 CultureInfo.InvariantCulture로 역직렬화해야 합니다. System.Text.Json은 기본적으로 이를 수행하며, Newtonsoft는 전역 설정으로 수행합니다.
  • 샘플 하나만으로 생성기를 신뢰하기. 널 허용 여부와 배열 요소 형식은 입력된 데이터로부터 추론됩니다. 널 허용 주석은 항상 실제 API 동작과 대조하여 확인하세요.

자주 묻는 질문

.NET 6 이상의 신규 프로젝트에서는 System.Text.Json을 사용하세요. 더 빠르고 기본 내장되어 있으며, 이제 Newtonsoft의 거의 모든 기능을 지원합니다. 레거시 프로젝트이거나 Newtonsoft 고유 기능(사용자 지정 계약 확인자, JObject, 동적 처리)이 필요한 경우에는 Newtonsoft를 사용하세요.

C# 10 이상에서는 불변 DTO에 레코드가 관용적입니다. 값 동등성과 간결한 구문을 제공합니다. 변경이 필요하거나 레거시 호환성이 필요할 때는 클래스가 더 낫습니다. 이 도구에서는 둘 중 어느 것이든 선택할 수 있습니다.

프로젝트에서 널 허용 참조 형식(C# 8 이상)을 사용하는 경우, 어떤 샘플에서든 null로 관측된 필드는 string?, int? 등이 됩니다. 널 허용 참조 형식을 사용하지 않으면 널 허용 여부는 값 형식(예: int?)에만 표시됩니다.

서로 다른 객체 형태가 섞인 배열은 강력한 형식의 C#에서 직접 표현할 수 없습니다. 이 도구는 공통 기본 클래스를 추론하거나 (대체로) object를 사용합니다. 혼합 배열의 경우 대개 JSON을 다시 설계하는 편이 좋습니다.

관련 도구

이 도구는 다른 언어로도 제공됩니다