programing

새 Net Core 3.0 Json을 사용하여 null인 경우 속성 무시

javamemo 2023. 2. 24. 13:13
반응형

새 Net Core 3.0 Json을 사용하여 null인 경우 속성 무시

JSON을 사용하는 경우.ASP 내의 네트워크Net Core 2.2 JSON으로 시리얼화할 때 값이 null일 때 속성을 무시할 수 있었습니다.

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public DateTime? Created { get; set; }

단, 새로운 ASP를 사용할 때는Net Core 3.0은 JSON(시스템)에 내장되어 있습니다.Text.Json) 값이 null인 경우 속성을 무시할 동등한 속성을 찾을 수 없습니다.

난 Json Ignore만 찾을 수 있었다.

내가 뭘 빼놓았나요?

보고 있어요.Net Core 3.1. 여기서 null 값은 무시됩니다.

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

에 있는 동안.NET 5 이후, 다음과 같이 설정합니다.

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

위의 내용은 속성/속성별이 아닙니다.단, 도움이 될 수 있는 속성이 있습니다.

문제를 해결하기 위해 JsonConverterAttribute를 사용할 수도 있습니다.자신의 컨버터를 쓰는 방법에 대한 정보는 이쪽에서 확인할 수 있습니다.

이것은 에서 수정되었습니다.넷 5

[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]

아래 업데이트를 참조하십시오.

https://github.com/dotnet/runtime/issues/41313

https://github.com/dotnet/runtime/issues/30687

JSON 직렬화 중에 null 값을 무시하도록 속성 수준을 제어하려면 Net Core 3.1의 경우 사용자 지정 변환기를 작성해야 합니다.뉴턴소프트에 기술된 예들이 있다.Json 이행 매뉴얼

Newtonsoft를 사용한 선언적 기능에는 큰 번거로움이 있습니다.Json 뉴턴소프트를 사용하도록 지정할 수 있습니다.기동시에 같은 값을 지정해, Json을 기동합니다.서비스()를 설정합니다.

services.AddControllers()
    .AddNewtonsoftJson();

메뉴얼에 기재되어 있듯이, Microsoft 를 추가할 필요가 있습니다.AspNetCore.MVC.NewtonsoftJson 패키지

이것은 속성별도 아니고 속성별도 아니지만 스타트업에서 이 기능을 추가하면 도움이 됩니다.

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

만약 당신이 여전히 뉴턴소프트를 사용하고 있다면..net core 3.1의 Json은 다음과 같은 구성을 원합니다.

services
   .AddControllers()
   .AddJsonOptions(options =>
   {
       options.JsonSerializerOptions.IgnoreNullValues = true;
   })
   .AddNewtonsoftJson(options =>
   {
       options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
   });

시스템을 사용하는 경우.Text.Json(.net 5.0) 및 모든 null 사용을 무시하는 경우 Writing Null 조건:

services.AddControllers().AddJsonOptions(a =>
     {
        a.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.Preserve;            
        a.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
     });

TL&DR: DotNet 6에서는 Null Value Handling이 폐지되었습니다.대신 DefaultIgnoreCondition = JsonIgnoreCondition을 사용하십시오.Writing Null의 경우

   services.AddControllersWithViews().AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
     
        });

공식 마이그레이션 가이드를 참조하십시오.ASP에서 마이그레이션NET Core 2.2~3.0

서비스 코드는 다음과 같습니다.

services.AddMvc(c =>
{

})
.AddNewtonsoftJson(
    options =>
        {
            options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
            options.SerializerSettings.ContractResolver = new DefaultContractResolver();
            options.SerializerSettings.StringEscapeHandling = StringEscapeHandling.EscapeHtml;                      

            options.SerializerSettings.Error = (object sender, ErrorEventArgs args) =>
            {
               // handle error
            };
        }
    );

언급URL : https://stackoverflow.com/questions/58106558/ignore-property-when-null-using-the-new-net-core-3-0-json

반응형