[c#] asp.net core 3에서 json serializer 설정을 설정하는 방법은 무엇입니까?

레거시 asp.net 핵심 응용 프로그램에 대한 json serializer 설정은을 추가하여 설정 AddMvc().AddJsonOptions()했지만 AddMvc()에서 사용하지는 않습니다 asp.net core 3. 전역 json 직렬화 설정을 어떻게 설정할 수 있습니까?



답변

AddMvcIMvcBuilder해당 AddJsonOptions확장 메소드 가 있는 구현을 리턴합니다 . 새로운 스타일의 방법 AddControllers, AddControllersWithViewsAddRazorPages도 돌아 IMvcBuilder구현. 다음과 같은 방식으로 체인을 연결하십시오 AddMvc.

services.AddControllers()
    .AddJsonOptions(options =>
    {
        // ...
    });

참고 것으로 options여기지만 새에 더 이상 Json.NET에 대한 없습니다 System.Text.JsonAPI를. 여전히 Json.NET을 사용하려면 tymtam의 답변을 참조하십시오


답변

옵션 A. AddControllers

이것은 여전히 ​​MVC이며 Microsoft.AspNetCore.Mvc.NewtonsoftJson nuget 패키지가 필요하지만 사용한다고 말했습니다 AddControllers.

에서 추가 Newtonsoft.Json 기반 JSON 포맷 지원

services.AddControllers().AddNewtonsoftJson(options =>
{
    // Use the default property (Pascal) casing
    options.SerializerSettings.ContractResolver = new DefaultContractResolver();

    // Configure a custom converter
    options.SerializerOptions.Converters.Add(new MyCustomJsonConverter());
});

옵션 B. 기본 설정

JsonConvert.DefaultSettings = () => new JsonSerializerSettings (...)

JsonConvert.DefaultSettings 속성

기본 JsonSerializerSettings를 만드는 함수를 가져 오거나 설정합니다. 기본 설정은 JsonConvert의 직렬화 메소드와 JToken의 ToObject () 및 FromObject (Object)에 의해 자동으로 사용됩니다. 기본 설정을 사용하지 않고 직렬화하려면 Create ()를 사용하여 JsonSerializer를 만듭니다.


답변

Newtonsoft를 추가 할 필요는 없습니다. .Net Core 3.0 프로젝트에 Newtonsoft 호환성 패키지를 추가하는 데 상당히 문제가 있습니다.

참조 https://github.com/aspnet/AspNetCore/issues/13564

물론, PascalCase지금은 NA 라는 속성 명명을 축하 할 것입니다 . 따라서 PascalCase nullPropertyNamingPolicy의미가 좋지 않습니다.

// Pascal casing
services.AddControllersWithViews().
        AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
            options.JsonSerializerOptions.PropertyNamingPolicy = null;
        });


답변