본문으로 건너뛰기
AZ Tools

JSON to C# 클래스 변환기

JSON 객체를 자동 프로퍼티 타입 매핑이 적용된 C# 클래스로 브라우저에서 변환합니다.

C# 클래스

사용법

  1. 입력 상자에 JSON을 붙여넣거나 입력합니다.
  2. 필요하면 루트 클래스 이름을 변경합니다(기본값 AutoGenerated).
  3. 출력 상자에서 생성된 클래스를 복사합니다.
  4. System.Text.Json이나 Newtonsoft.Json으로 역직렬화하세요. 파스칼 케이스 속성이 JSON 키에 바인딩되도록 대소문자를 구분하지 않는 속성 매칭을 켜야 합니다.

자세한 설명

펼치기

JSON 객체나 배열을 붙여넣으면 타입이 지정된 자동 속성을 가진 C# 클래스 정의와, 값을 담고 있던 키의 이름을 딴 중첩 객체용 별도 클래스를 바로 얻을 수 있습니다. 속성 이름은 파스칼케이스로 만듭니다. 이것이 C#의 관례이며, Newtonsoft.Json과 System.Text.Json 모두 JSON 키를 대소문자 구분 없이 맞추도록 설정할 수 있어 바인딩에도 문제가 없습니다. System.Text.Json에서는 옵션의 PropertyNameCaseInsensitive가 그 역할을 합니다. 다만 이는 대소문자 차이만 메워 주므로, first_name이나 created-at 같은 키에는 원래 표기를 담은 [JsonPropertyName] 애트리뷰트를 붙여 줍니다. 정수는 long, 소수는 double로 매핑되며, 큰 ID도 견디도록 일부러 넉넉하게 잡았습니다. JSON null은 object가 되고 빈 배열은 List<object>가 됩니다. 표본 하나로는 무엇이 들어갈 자리인지 알 수 없기 때문입니다. 널 허용 값 형식은 직접 붙여야 할 부분입니다. 모든 처리는 브라우저에서 이루어지며 JSON은 업로드되지 않습니다.

자주 묻는 질문

숫자는 어떤 타입이 되나요?

정수는 long, 소수점이 있는 숫자는 double로 변환됩니다. 다른 타입을 원하면 int나 decimal로 직접 변경하세요.

null이나 빈 배열은 어떻게 처리되나요?

샘플로 타입을 추론할 수 없으므로 null은 object로, 빈 배열은 List<object>로 변환됩니다.

프로퍼티 이름이 PascalCase인 이유는 무엇인가요?

C#의 표준 규칙이기 때문입니다. Newtonsoft.Json은 키를 대소문자 구분 없이 매칭하고, System.Text.Json은 PropertyNameCaseInsensitive 설정 시 바인딩합니다.

제 JSON이 어딘가로 전송되나요?

아니요. 변환은 전적으로 브라우저에서 이루어지며 아무것도 업로드되지 않습니다.

모든 속성에 JsonPropertyName을 붙여야 하나요?

단순한 대소문자 차이라면 필요 없습니다. System.Text.Json은 PropertyNameCaseInsensitive를 켜면 파스칼 케이스 속성을 카멜 케이스 키에 바인딩하고, Newtonsoft는 기본으로 그렇게 합니다. 키에 밑줄, 하이픈, 공백처럼 파스칼케이스로 바꾸면 달라지는 표기가 있을 때는 애트리뷰트가 필요하며, 이 도구가 자동으로 붙여 줍니다.

숫자 필드가 가끔 null인데 무엇이 깨지나요?

long과 double은 값 형식이라 null을 담을 수 없어서, JSON의 null이 0으로 역직렬화되고 값이 없었던 경우와 진짜 0인 경우를 구분할 수 없게 됩니다. 선택적인 필드라면 long?과 double?처럼 널 허용 형태로 바꾸세요.

관련 도구