programing

이제 JSON 속성이 ASP .Net Core 1.0.0-rc2-final에서 1.0.0으로 스왑시 소문자

nasanasas 2020. 11. 20. 09:02
반응형

이제 JSON 속성이 ASP .Net Core 1.0.0-rc2-final에서 1.0.0으로 스왑시 소문자


방금 프로젝트를 ASP .Net Core 1.0.0-rc2-final에서 1.0.0으로 바꿨습니다. 우리 웹 사이트와 클라이언트는 JSON 속성의 대문자로 인해 작동을 멈췄습니다. 예를 들어,이 JavaScript 줄은 이제 실패합니다.

for (var i = 0; i < collection.Items.length; i++){

컨트롤러는 이제 "Items"대신 "items"배열을 호출하기 때문입니다. 업데이트 된 패키지를 설치하고 project.json 파일을 편집하는 것 외에는 변경하지 않았습니다. 여전히 속성을 대문자로 사용하는 C # 모델 파일을 변경하지 않았습니다.

ASP.Net Core 컨트롤러가 소문자 속성으로 JSON을 반환하기 시작한 이유는 무엇입니까? 모델에서 속성 이름의 대소 문자를 존중하는 방법으로 돌아가려면 어떻게해야합니까?


MVC는 이제 기본적으로 낙타 케이스 이름으로 JSON을 직렬화합니다.

이 코드를 사용하여 기본적으로 카멜 케이스 이름을 피하십시오.

  services.AddMvc()
        .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());

출처 : https://github.com/aspnet/Announcements/issues/194


다음과 같이 동작을 변경할 수 있습니다.

services
    .AddMvc()
    .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());

https://github.com/aspnet/Announcements/issues/194 에서 발표 내용을 참조하십시오.


Google에서 이것을 발견하고 Core 3에 대한 솔루션을 찾고있는 경우

Core 3은 기본적으로 대소 문자를 유지하지 않는 System.Text.Json을 사용합니다. Github 문제 에서 언급했듯이 PropertyNamingPolicy를 null로 설정하면 문제가 해결됩니다.

public void ConfigureServices(IServiceCollection services)
{
...
    services.AddControllers()
            .AddJsonOptions(opts => opts.JsonSerializerOptions.PropertyNamingPolicy = null);

ASP.NET Core가 아닌 ASP.net WEB API를 사용하는 일부 사용자를위한 것입니다.

WebApiConfig에이 줄을 추가합니다.

//Comment this jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

jsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();

웹 API에 대한 Google 검색에서도 처음으로 나오기 때문에 여기에 답변으로 추가하십시오.

참고 URL : https://stackoverflow.com/questions/38202039/json-properties-now-lower-case-on-swap-from-asp-net-core-1-0-0-rc2-final-to-1 -0

반응형