.Net Core 3.0에서 IMvcBuilder AddJsonOptions는 어디에 있습니까?


119

방금 내 ASP 웹 API 프로젝트를. Net core 2.03.0. 나는 사용하고 있었다

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

이전에 직렬화 된 JSON의 소문자를 보장합니다.

3.0으로 업그레이드 한 후이 오류가 발생합니다.

오류 CS1061 'IMvcBuilder'에 'AddJsonOptions'에 대한 정의가 포함되어 있지 않으며 'IMvcBuilder'유형의 첫 번째 인수를 허용하는 액세스 가능한 확장 메서드 'AddJsonOptions'를 찾을 수 없습니다 (using 지시문 또는 어셈블리 참조가 누락 되었습니까?).

Asp.Net Core 2.2MvcJsonOptions에 대한 AddJsonOptions에 따르면 AddJsonOptions 확장 메서드는 Microsoft.AspNetCore.Mvc.Formatters.Json nuget 패키지 에서 제공됩니다 . 이 설치 / 재설치를 시도했지만 여전히 방법을 해결할 수 없습니다. 흥미롭게도 intellisense는 Microsoft.AspNetCore.Mvc.Formatters 만 표시합니다. Json nuget 패키지를 추가 했는데도 using 문을 추가하려고 할 때 XML .

무슨 일이 일어나고 있는지 아이디어가 있습니까? AddJsonOptions에 대한 문서 는 .Net 2.2까지만 올라갑니다. 그래서 아마도 다른 구성 메커니즘을 위해 3.0 에서이 메서드가 더 이상 사용되지 않을까요?

답변:


203

ASP.NET Core 3.0의 일부로 팀은 기본적으로 Json.NET을 포함하지 않았습니다. 일반적 으로 Microsoft.AspNetCore.App의 주요 변경 사항 에 대한 발표 에서 이에 대한 자세한 내용을 읽을 수 있습니다 .

Json.NET 대신 ASP.NET Core 3.0 및 .NET Core 3.0에는 성능에 좀 더 중점을 둔 다른 JSON API가 포함되어 있습니다. ".NET Core 3.0에서 JSON의 미래" 에 대한 발표 에서 이에 대해 자세히 알아볼 수 있습니다 .

ASP.NET Core 용 새 템플릿은 더 이상 Json.NET과 번들로 제공되지 않지만 새 JSON 라이브러리 대신 사용하도록 프로젝트를 쉽게 재구성 할 수 있습니다. 이는 이전 프로젝트와의 호환성 및 새 라이브러리가 전체를 대체 할 수 없기 때문에 여기에서 전체 기능 세트를 볼 수 없기 때문에 중요합니다.

Json.NET을 사용하여 ASP.NET Core 3.0 프로젝트를 다시 구성 Microsoft.AspNetCore.Mvc.NewtonsoftJson하려면 필요한 모든 비트가 포함 된 패키지 인에 NuGet 참조를 추가해야합니다 . 그런 다음 Startup의 ConfigureServices에서 다음과 같이 MVC를 구성해야합니다.

services.AddControllers()
    .AddNewtonsoftJson();

이렇게하면 MVC 컨트롤러가 설정되고 새 API 대신 Json.NET을 사용하도록 구성됩니다. 컨트롤러 대신 다른 MVC 오버로드를 사용할 수도 있습니다 (예 : 뷰가있는 컨트롤러 또는 Razor 페이지의 경우). 이 AddNewtonsoftJson메서드에는 AddJsonOptionsASP.NET Core 2.x에서 사용했던 것처럼 Json.NET 옵션을 구성 할 수있는 오버로드가 있습니다 .

services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.ContractResolver = new DefaultContractResolver();
    });

41
집에서 따라 오는 사람들을 위해 ... 프로젝트를 마이그레이션 할 때 "AddNewtonsoftJson"확장을 얻기 위해 "Microsoft.AspNetCore.Mvc.NewtonsoftJson"에 대한 너겟 참조를 추가해야 할 수 있습니다. 작성 시점에 Visual Studio Nuget 관리자를 사용하는 경우 "사전 릴리스 포함"을 확인해야합니다.
NeilMacMullen

1
일반적으로 아직 실제 애플리케이션을 사용하여 ASP.NET Core 3으로 마이그레이션하는 것은 권장하지 않습니다. 그냥 플레이하고 싶지만 최종 릴리스 전에는 여전히 몇 가지 움직이는 부분이 있으므로 일찍 마이그레이션하려는 경우이를 염두에 두어야합니다.
찌를

1
이로 인해 "동기 작업이 허용되지 않음"이 트리거 될 수 있습니다. 자세한 내용은 stackoverflow.com/questions/47735133/… 확인
verbedr

8
나를 위해 AddNewtonsoftJson그 참조를 Microsoft.AspNetCore.Mvc.NewtonsoftJson참조한 후에도 누락되었습니다 .
Saeed Neamati 2010 년

2
@avenmore 새로운 serializer는 별도의 속성 집합을 사용합니다. 네임 스페이스 [JsonIgnore]에서 사용할 수 있습니다 System.Text.Json.Serialization.
찌르기

21

이것은 사용하는 동안 나를 위해 일했습니다 .Net Core 3.

services.AddMvc().AddJsonOptions(o =>
{
    o.JsonSerializerOptions.PropertyNamingPolicy = null;
    o.JsonSerializerOptions.DictionaryKeyPolicy = null;
});

나는 그 라인이 다음과 같아야한다고 가정합니다 :o.JsonSerializerOptions.PropertyNameCaseInsensitive = false;
Grandizer

1
예, 저도 그렇습니다. 이 대답은 나를 위해 일했습니다.
Martin

2
필요 없음 o.JsonSerializerOptions.DictionaryKeyPolicy = null;o.JsonSerializerOptions.PropertyNameCaseInsensitive = false;
샤 하르 Shokrani

이 답변을 사용할 수 있기를 원하지만 내 응용 프로그램은 Newtonsoft 속성을 사용하여 빌드되었으며 새로운 MS 직렬 변환기는 무시하므로 AddNewtonsoftJson과 함께 Newtonsoft 직렬 변환기를 계속 사용해야합니다. MS는 Newtonsoft 속성을 존중하는 옵션을 추가하는 동시에 그들이 기대하는 성능 향상을 얻을 수 있습니다.
Eric

@eric 네 맞습니다 만, Newtonsoft의 성능은 대부분의 상황에 충분합니다.
Mohammad Olfatmiri

0

이것은 도움이 될 것입니다

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

            });

            services.AddDbContext<PaymentDetailContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DevConnection")));
        }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.