ระงับคุณสมบัติที่มีค่า null บน ASP.NET Web API


100

ฉันได้สร้างโครงการ ASP.Net WEB API ที่แอปพลิเคชันมือถือจะใช้ ฉันต้อง JSON การตอบสนองต่องดคุณสมบัติ null property: nullแทนการผลตอบแทนที่พวกเขาเป็น

ฉันจะทำเช่นนี้ได้อย่างไร?

คำตอบ:


135

ใน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

9
เนื่องจาก Json.NET 5 (ไม่แน่ใจสำหรับเวอร์ชันก่อนหน้า) คุณสามารถทำได้: config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore- สิ่งนี้จะอัปเดตการจัดการค่าว่างโดยไม่ต้องรีเซ็ตการตั้งค่าอนุกรม json อื่น ๆ (เช่นการใช้ตัวพิมพ์เล็กในตัวอักษรตัวแรกของคุณสมบัติ)
Ivaylo Slavov

7
เป็นไปได้หรือไม่ที่จะทำเพื่อทรัพย์สินเดียว?
Martin Brown

1
the NullValueHandling = NullValueHandling การละเว้นไม่ได้ผลสำหรับผลลัพธ์ของฉัน
Nathan Tregillus

2
ถ้าการเปลี่ยนแปลงที่จะเกิดขึ้นบนพื้นฐานต่อทรัพย์สินและมีการใช้รุ่นใหม่พอ Json.Net [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]หนึ่งสามารถใช้คุณลักษณะนี้ในสถานที่:
Carsten Führmann

32

ฉันลงเอยด้วยโค้ดชิ้นนี้ในไฟล์ startup.cs โดยใช้ ASP.NET5 1.0.0-beta7

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


5

หากคุณกำลังใช้ 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);
        });

    }

5

คุณยังสามารถใช้[DataContract]และ[DataMember(EmitDefaultValue=false)]แอตทริบิวต์


1
นี่เป็นคำตอบเดียวที่ครอบคลุมทั้งการตอบสนอง xml และ json
ColmanJ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.