JSON → C# 클래스 변환기

JSON에서 속성과 JsonProperty 어트리뷰트를 갖춘 C# 클래스를 생성합니다. Newtonsoft.Json에서 바로 사용할 수 있습니다.

JSON에서 C# 클래스 생성

.NET에서 JSON을 역직렬화하려면 먼저 페이로드와 속성이 일치하는 모델 클래스가 필요합니다. 이 변환기가 그 클래스를 대신 작성해 줍니다. camelCase 키는 원래 키를 담은 [JsonProperty] 어트리뷰트가 붙은 PascalCase 속성이 되고, 중첩 객체는 각각의 partial 클래스가 되며, 배열은 타입이 지정된 배열, 정수는 long, 소수는 double이 됩니다. 또한 Newtonsoft.Json(Json.NET)용 컨버터 설정이 포함된 정적 FromJson 메서드와 ToJson 확장 메서드도 추가됩니다.

사용 방법

  1. 서비스에서 호출하는 API의 응답 같은 JSON 샘플을 붙여넣습니다.
  2. 루트 클래스 이름을 입력합니다. 예: Product.
  3. Newtonsoft.Json NuGet 패키지를 설치하고 파일을 프로젝트에 추가한 뒤, QuickType 네임스페이스를 원하는 이름으로 바꾸고 Product.FromJson(json)을 호출합니다.

자주 묻는 질문

System.Text.Json에서도 사용할 수 있나요?
어트리뷰트와 헬퍼는 Newtonsoft.Json을 대상으로 합니다. System.Text.Json을 쓰려면 속성은 그대로 두고 [JsonProperty]를 System.Text.Json.Serialization의 [JsonPropertyName]으로 바꾼 뒤 JsonSerializer.Deserialize<Product>(json)로 역직렬화하세요.
숫자가 long과 double로 생성되는 이유는 무엇인가요?
JSON 숫자에는 고정된 크기가 없으므로 long과 double을 사용해 예기치 않은 오버플로를 방지합니다. 도메인에 맞게 복사 후 int나 decimal로 바꿔도 됩니다. 예를 들어 금액에는 decimal을 사용하세요.
클래스가 partial로 선언되는 이유는 무엇인가요?
partial 클래스를 사용하면 생성된 속성과 FromJson 헬퍼를 별도의 선언으로 나눌 수 있고, 생성된 파일을 수정하지 않고도 다른 파일에서 직접 멤버를 추가할 수 있습니다.

예시: JSON to C#

입력 JSON

{
  "productId": 7,
  "title": "Mechanical Keyboard",
  "price": 129.99,
  "inStock": true,
  "tags": ["hardware", "usb-c"]
}

생성된 C# 코드 (Product)

// <auto-generated />
//
// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
//
//    using QuickType;
//
//    var product = Product.FromJson(jsonString);

namespace QuickType
{
    using System;
    using System.Collections.Generic;

    using System.Globalization;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Converters;

    public partial class Product
    {
        [JsonProperty("productId")]
        public long ProductId { get; set; }

        [JsonProperty("title")]
        public string Title { get; set; }

        [JsonProperty("price")]
        public double Price { get; set; }

        [JsonProperty("inStock")]
        public bool InStock { get; set; }

        [JsonProperty("tags")]
        public string[] Tags { get; set; }
    }

    public partial class Product
    {
        public static Product FromJson(string json) => JsonConvert.DeserializeObject<Product>(json, QuickType.Converter.Settings);
    }

    public static class Serialize
    {
        public static string ToJson(this Product self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
    }

    internal static class Converter
    {
        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
        {
            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
            DateParseHandling = DateParseHandling.None,
            Converters =
            {
                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
            },
        };
    }
}

다른 언어로 JSON 변환