ASP.NET Web APIでnull値を持つプロパティを非表示にする


回答:


132

WebApiConfig

config.Formatters.JsonFormatter.SerializerSettings = 
                 new JsonSerializerSettings {NullValueHandling = NullValueHandling.Ignore};

または、より詳細な制御が必要な場合は、フォーマッタ全体を置き換えることができます。

var jsonformatter = new JsonMediaTypeFormatter
{
    SerializerSettings =
    {
        NullValueHandling = NullValueHandling.Ignore
    }
};

config.Formatters.RemoveAt(0);
config.Formatters.Insert(0, jsonformatter);

2
Shame config.Formatters.XmlFormatterには同じプロパティがありません...:/
RoboJ1M

8
Json.NET 5(以前のバージョンでは不明)なので、これを行うこともできます:config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore-これにより、他のjsonシリアル化設定をリセットせずにnull値の処理が更新されます(プロパティの最初の文字に小文字を使用するなど)
Ivaylo Slavov

7
単一のプロパティに対してそれを実行させることは可能ですか?
マーティンブラウン

1
NullValueHandling = NullValueHandling.Ignoreが私の結果に対して機能しなかった
Nathan Tregillus

2
プロパティごとに変更を行う必要があり、十分に新しいバージョンのJson.Netを使用している場合は、プロパティでこの属性を使用できます[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
CarstenFührmann、2018

32

ASP.NET5 1.0.0-beta7を使用して、startup.csファイルに次のコードを追加しました。

services.AddMvc().AddJsonOptions(options =>
{
    options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
});

13

ASP.NET Core 3.0のConfigureServices()場合、Startup.csコード内のメソッドには以下が含まれている必要があります。

services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.IgnoreNullValues = true;
    });

質問は何ですか?
Orestis Zekai

4

vnextを使用している場合は、vnext web apiプロジェクトで、このコードをstartup.csファイルに追加します。

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().Configure<MvcOptions>(options =>
        {
            int position = options.OutputFormatters.FindIndex(f =>  f.Instance is JsonOutputFormatter);

            var settings = new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            };

            var formatter = new JsonOutputFormatter();
            formatter.SerializerSettings = settings;

            options.OutputFormatters.Insert(position, formatter);
        });

    }

4

[DataContract]および[DataMember(EmitDefaultValue=false)]属性を使用することもできます


1
これは、xml応答とjson応答の両方をカバーする唯一の回答です。
ColmanJ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.