Loại bỏ các thuộc tính có giá trị null trên ASP.NET Web API


94

Tôi đã tạo một Dự án API ASP.Net WEB sẽ được sử dụng bởi một ứng dụng di động. Tôi cần json phản hồi để bỏ qua các thuộc tính null thay vì trả về chúng dưới dạng property: null.

Tôi có thể làm cái này như thế nào?

Câu trả lời:


132

Trong WebApiConfig:

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

Hoặc, nếu bạn muốn kiểm soát nhiều hơn, bạn có thể thay thế toàn bộ định dạng:

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

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

2
Xấu hổ config.Formatters.XmlFormatter không có tài sản tương tự ...: /
RoboJ1M

8
Kể từ Json.NET 5 (không chắc chắn đối với các phiên bản trước), bạn cũng có thể làm điều này: config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore- điều này sẽ cập nhật việc xử lý giá trị null mà không cần đặt lại bất kỳ cài đặt tuần tự hóa json nào khác (như sử dụng chữ thường trên chữ cái đầu tiên của thuộc tính)
Ivaylo Slavov

7
Có thể làm cho nó để làm điều đó chỉ cho một tài sản duy nhất?
Martin Brown

1
các NullValueHandling = NullValueHandling.Ignore không làm việc cho kết quả của tôi
Nathan Tregillus

2
Nếu sự thay đổi sẽ xảy ra trên một cơ sở cho mỗi tài sản, và một đang sử dụng một phiên bản đầy đủ mới của Json.Net, người ta có thể sử dụng thuộc tính này vào bất động sản: [JsonProperty(NullValueHandling = NullValueHandling.Ignore)].
Carsten Führmann

32

Tôi đã kết thúc với đoạn mã này trong tệp startup.cs bằng ASP.NET5 1.0.0-beta7

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

13

Đối với ASP.NET Core 3.0, ConfigureServices()phương thức trong Startup.csmã phải chứa:

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

Câu hỏi là gì?
Orestis Zekai

4

Nếu bạn đang sử dụng vnext, trong các dự án api web vnext, hãy thêm mã này vào tệp 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

Bạn cũng có thể sử dụng [DataContract][DataMember(EmitDefaultValue=false)]các thuộc tính


1
Đây là câu trả lời duy nhất bao gồm cả phản hồi xml và json.
ColmanJ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.