[c#] asp.net core 3에서 json serializer 설정을 설정하는 방법은 무엇입니까?
레거시 asp.net 핵심 응용 프로그램에 대한 json serializer 설정은을 추가하여 설정 AddMvc().AddJsonOptions()
했지만 AddMvc()
에서 사용하지는 않습니다 asp.net core 3
. 전역 json 직렬화 설정을 어떻게 설정할 수 있습니까?
답변
AddMvc
IMvcBuilder
해당 AddJsonOptions
확장 메소드 가 있는 구현을 리턴합니다 . 새로운 스타일의 방법 AddControllers
, AddControllersWithViews
및 AddRazorPages
도 돌아 IMvcBuilder
구현. 다음과 같은 방식으로 체인을 연결하십시오 AddMvc
.
services.AddControllers()
.AddJsonOptions(options =>
{
// ...
});
참고 것으로 options
여기지만 새에 더 이상 Json.NET에 대한 없습니다 System.Text.Json
API를. 여전히 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 null
는 PropertyNamingPolicy
의미가 좋지 않습니다.
// Pascal casing
services.AddControllersWithViews().
AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
options.JsonSerializerOptions.PropertyNamingPolicy = null;
});