2019. 12. 15. 15:30

닷넷 코어를 쓰고 나서부터........API결과는 'camelCase'로 온다고 느끼고 있었습니다.

이걸 'PascalCase'로 바꿔 봅시다.

 

 

 

1. 카멜케이스(camelCase)와 파스칼케이스(PascalCase)

코드 표기법에는 여러 가지가 있는데 그중 많이 쓰는 것이 카멜케이스(카멜표기법)와 파스칼케이스(파스칼표기법)입니다.

 

파스칼케이스는 단어를 대문자로 시작하고 붙여 씁니다.

예> PascalCase

 

카멜케이스는 파스칼케이스에 첫 대문자만 소문자로 표시합니다.

예> camelCase

 

 

 

2. C#에서는....

그런데 C#의 네이밍 규칙의 기본은 파스칼케이스입니다.

 

 

그런데 API에서 모델을 결과로 전달하면 카멜케이스로 넘어옵니다.

 

 

3. 파스칼케이스로 바꾸기

필요한 부분만 바꾸는 방법과 전체를 기본 정책을 바꾸는 방법이 있습니다.

 

 

3-1. 필요한 부분만 바꾸기

필요한 부분에 'JsonProperty'속성을 추가해줍니다.

( 참고 : stackoverflow Janus Pienaar님 답변 - How to keep casing of properties in json returned by Asp.Net Core controller? )

 

예>

[JsonProperty("TestInt03")]
public int IntTest03 { get; set; }
[JsonProperty("TestString03")]
public string StringTest03 { get; set; }

 

속성이 우선적용됩니다.

 

 

3-2. 전체 적용하기

 

'Startup.cs'의 'ConfigureServices'를 다음과 같이 작성합니다.

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
 
    services.AddMvc()
        .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
}

 

'AddJsonOptions'를 이용하여 'DefaultContractResolver'옵션을 추가해주면 됩니다.

( 참고 : .Net Core Tutorials - Pascalcase vs Camelcase in ASP.net Core )

 

기존 모델도 파스칼케이스로 바뀐것을 알 수 있습니다.

 

 

3-3. 3.0 버전 부터는...

3.0 부터는 코드가 다릅니다.

 

먼저 누겟(NuGet)에서 'Microsoft.AspNetCore.Mvc.NewtonsoftJson'를 찾아 설치해줍니다.

 

 

참조 추가를 해줍니다.

using Newtonsoft.Json.Serialization;

 

코드를 바꿉니다.

//API모델을 파스칼 케이스 유지하기
services.AddControllers().AddNewtonsoftJson(options =>{ options.SerializerSettings.ContractResolver = new DefaultContractResolver();});

 

 

마무리

완성된 샘플 : Github dang-gun - AspDotNetSamples/WebApiPascalCase/

 

이게 닷넷코어전에는 파스칼케이스가 기본이였던거 같은데.....

기억이 안나네요 ㅎㅎㅎㅎ