programing

.NET Core: API JSON 응답에서 null 필드를 삭제합니다.

linuxpc 2023. 3. 22. 20:49
반응형

.NET Core: API JSON 응답에서 null 필드를 삭제합니다.

의 글로벌 레벨에서NET Core 1.0(모든 API 응답), JSON 응답에서 늘필드가 삭제 또는 삭제되도록 Startup.cs을 설정하려면 어떻게 해야 합니까?

뉴턴소프트 사용.Json, 다음 속성을 속성에 적용할 수 있지만 모든 속성에 추가할 필요는 없습니다.

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string FieldName { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string OtherName { get; set; }
.NET Core 1.0

Startup.cs, 접속할 수 있습니다.JsonOptions여기서 null 값 삭제를 포함한 다양한 설정을 실시합니다.

public void ConfigureServices(IServiceCollection services)
{
     services.AddMvc()
             .AddJsonOptions(options => {       
                  options.SerializerSettings
                         .NullValueHandling = NullValueHandling.Ignore;
     });
}
.NET Core 3.1

다음 행 대신:

options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;

용도:

options.JsonSerializerOptions.IgnoreNullValues = true;
.NET 5.0

위의 두 변형 대신 다음을 사용합니다.

 options.JsonSerializerOptions.DefaultIgnoreCondition 
                       = JsonIgnoreCondition.WhenWritingNull;

에서의 변종.NET Core 3.1은 아직 동작하고 있습니다만, 다음과 같이 마크되어 있습니다.NonBrowsable(따라서 이 파라미터에 대한 IntelliSense 힌트를 얻을 수 없습니다).따라서 이 파라미터는 어느 시점에서 폐지될 가능성이 매우 높습니다.

이는 글로벌 동작을 변경하지 않는 경우에도 컨트롤러별로 실행할 수 있습니다.

public IActionResult GetSomething()
{
   var myObject = GetMyObject();
   return new JsonResult(myObject, new JsonSerializerSettings() 
   { 
       NullValueHandling = NullValueHandling.Ignore 
   });
};

dotnet core 3의 경우 이것으로 해결된다는 것을 알게 되었습니다.

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

net 5사실...DefaultIgnoreCondition:

public void ConfigureServices(IServiceCollection services)
{
   services.AddControllers()
           .AddJsonOptions(options =>
                {
 options.JsonSerializerOptions.DefaultIgnoreCondition =
        System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull;
                });
        }

이것에 의해, 속성에 추가의 어트리뷰트를 필요로 하지 않고, null 값의 시리얼화와 디시리얼화를 모두 방지할 수 있습니다.

.Net core 6(최소 API 사용):

using Microsoft.AspNetCore.Http.Json;

builder.Services.Configure<JsonOptions>(options => 
         options.SerializerOptions.DefaultIgnoreCondition 
   = JsonIgnoreCondition.WhenWritingDefault | JsonIgnoreCondition.WhenWritingNull);

특정 속성에만 적용하고 사용하려는 경우System.Text.Json이렇게 장식할 수 있어요.

[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public string Market { get; set; }

에는 다음 사항이 적용됩니다.Startup.cs > Configure Services()에서 NET Core 3.0:

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

.Net 5 이상에서는 AddJsonOptions 대신 AddNewtonsoftJson을 사용하는 경우 설정은 다음과 같습니다.

 services.AddMvc(options =>
                    {
                       //any other settings
                    })
                    .AddNewtonsoftJson(options =>
                    {
                        options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
                    });

또한 Asp.Net Core에서는 다음을 반환하여 작업 방법으로도 수행할 수 있습니다.

return new JsonResult(result, new JsonSerializerOptions
{
   IgnoreNullValues = true,
});

.net core v3.1 MVC api에서 다음을 사용했습니다.

 services.AddMvc().AddJsonOptions(options =>
            {

                options.JsonSerializerOptions.DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull;
            });

에 한 가지 방법이 더 있습니다.Net 6, 특정 Object Result:

public class IdentityErrorResult : BadRequestObjectResult
{
    public IdentityErrorResult([ActionResultObjectValue] object? error) : base(error)
    {
        Formatters.Add(new SystemTextJsonOutputFormatter(new JsonSerializerOptions
        {
            DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
        }));
    }
}

컨트롤러:

public IdentityErrorResult IdentityError(ErrorResponseObject value)
  => new IdentityErrorResult(value);

사용하고 있는 경우.NET 6 및 REST 응답의 null 값을 삭제하려면 Program.cs 에서 다음 행을 추가합니다.

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
    });

다음 코드는 에서 사용할 수 있습니다.넷코어 2.2

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

언급URL : https://stackoverflow.com/questions/44595027/net-core-remove-null-fields-from-api-json-response

반응형