방금 내 ASP 웹 API 프로젝트를. Net core 2.0
에 3.0
. 나는 사용하고 있었다
services.AddMvc()
.AddJsonOptions(options =>options.SerializerSettings.ContractResolver
= new DefaultContractResolver());
이전에 직렬화 된 JSON의 소문자를 보장합니다.
3.0으로 업그레이드 한 후이 오류가 발생합니다.
오류 CS1061 ‘IMvcBuilder’에 ‘AddJsonOptions’에 대한 정의가 포함되어 있지 않으며 ‘IMvcBuilder’유형의 첫 번째 인수를 허용하는 액세스 가능한 확장 메서드 ‘AddJsonOptions’를 찾을 수 없습니다 (using 지시문 또는 어셈블리 참조가 누락 되었습니까?).
Asp.Net Core 2.2 의 MvcJsonOptions에 대한 AddJsonOptions에 따르면 AddJsonOptions 확장 메서드는 Microsoft.AspNetCore.Mvc.Formatters.Json nuget 패키지 에서 제공됩니다 . 이 설치 / 재설치를 시도했지만 여전히 방법을 해결할 수 없습니다. 흥미롭게도 intellisense는 Microsoft.AspNetCore.Mvc.Formatters 만 표시합니다. Json nuget 패키지를 추가 했는데도 using 문을 추가하려고 할 때 XML .
무슨 일이 일어나고 있는지 아이디어가 있습니까? AddJsonOptions에 대한 문서 는 .Net 2.2까지만 올라갑니다. 그래서 아마도 다른 구성 메커니즘을 위해 3.0 에서이 메서드가 더 이상 사용되지 않을까요?
답변
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
메서드에는 AddJsonOptions
ASP.NET Core 2.x에서 사용했던 것처럼 Json.NET 옵션을 구성 할 수있는 오버로드가 있습니다 .
services.AddControllers()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
답변
이것은 사용하는 동안 나를 위해 일했습니다 .Net Core 3
.
services.AddMvc().AddJsonOptions(o =>
{
o.JsonSerializerOptions.PropertyNamingPolicy = null;
o.JsonSerializerOptions.DictionaryKeyPolicy = null;
});
답변
이것은 도움이 될 것입니다
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")));
}