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


29

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


사용하지 않는 경우 AddMvc, 무엇을 어떻게 사용? 예를 들어, AddControllers아니면 MVC를 전혀 사용하지 않습니까?
Kirk Larkin

- 난 기본 asp.net 코어 3 응용 프로그램을 구축하는 방법을 사용 @KirkLarkin app.UseEndpoints(endpoints => { endpoints.MapControllers() })services.AddControllers();
알렉스 Zaitsev

좋아, 그래서 당신이에서 사용하고 AddControllers있는 것 같아요 ConfigureServices?
Kirk Larkin

@KirkLarkin, 네, 맞습니다
Alex Zaitsev

답변:


27

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

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

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



"options.JsonSerializerOptions.IgnoreNullValues ​​= true;"추가 효과 없음
zion

1
이 페이지를 방문하여 Enum 변환을 찾는 다른 사람들에게 : [JsonConverter (typeof (JsonStringEnumConverter))] public enum SomeEnum
Rafał Praniuk

23

옵션 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를 만듭니다.


안녕하세요, Json.NET 수준에서 설정을 지정합니다. ASP.NET 수준에서 어떻게 설정할 수 있습니까?
Alex Zaitsev

ASP.NET 수준에서 설정을 구성합니다. 기본 ModelBinding은 이제 NewtonsoftJson serializer를 사용하여 발생합니다.
MrClan

감사합니다. 옵션 A가 저에게 도움이되었습니다. 2.2에서 3.1로 업그레이드되었으며 System.Text.Json다형성이나 열거 형을 올바르게 처리하지 않아 엔드 포인트가 중단되었습니다 . 기본 시리얼 라이저를 변경하는 좋은 방법.
static_void

15

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;
        });
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.