web-dev-qa-db-ja.com

IMvcBuilder AddJsonOptionsは.Net Core 3.0のどこにありますか?

ASP Web 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.Jsonnugetパッケージ。これをインストール/再インストールしようとしましたが、それでもメソッドを解決できません。興味深いことに、intellisenseはMicrosoft.AspNetCore.Mvc.Formatters .Xmlを表示するだけです--Json nugetパッケージを追加したとしても、usingステートメントを追加しようとしたとき。

何が起こっているのですか? documentation for AddJsonOptionsは.Net 2.2までしか機能しないので、3.0でこのメソッドは他のいくつかの構成メカニズムのために廃止されたのでしょうか?

93
NeilMacMullen

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ライブラリの代わりにそれを使用するようにプロジェクトを簡単に再構成できます。これは、古いプロジェクトとの互換性の両方にとって重要です。また、新しいライブラリは完全な置き換えとは見なされないため、そこに完全な機能セットは表示されません。

ASP.NET Core 3.0プロジェクトをJson.NETで再構成するには、Microsoft.AspNetCore.Mvc.NewtonsoftJsonへのNuGet参照を追加する必要があります。これは、必要なすべてのビットを含むパッケージです。次に、スタートアップのConfigureServicesで、次のようにMVCを構成する必要があります。

services.AddControllers()
    .AddNewtonsoftJson();

これにより、MVCコントローラーがセットアップされ、その新しいAPIの代わりにJson.NETを使用するように構成されます。コントローラーの代わりに、別のMVCオーバーロードを使用することもできます(たとえば、ビューを持つコントローラーやRazorページの場合)。そのAddNewtonsoftJsonメソッドには、ASP.NET Core 2.xでAddJsonOptionsを使用するのと同じようにJson.NETオプションを設定できるオーバーロードがあります。

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

これは私のために働きました(.net core 3)

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

これは役に立ちます

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")));
        }
0
Nirmala