[C#, Json.NET] Ignore, Default 확인하기

using Newtonsoft.Json;
using System.ComponentModel;

struct JsonObject
{
    // Null값을 세팅하여 직렬화 시 무시되는지 체크
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public int? IgnoreNullInt { get; set; }

    // Null값을 세팅하여 직렬화 시 무시가 되지 않는지 체크
    [JsonProperty(NullValueHandling = NullValueHandling.Include)]
    public int? IncludeNullInt { get; set; }

    // Null이 아닌 값을 세팅하여 무시되지 않는지 체크
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public int? NotNullInt { get; set; }

    // int형에 default를 할당하면 0이 할당되는데, DefaultValue로 0을 지정하여 무시되는지 체크
    [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
    [DefaultValue(0)]
    public int IgnoreDefaultValue { get; set; }

    // int형에 default를 할당하면 0이 할당되는데, DefaultValue로 0을 지정하여 무시되지 않는지 체크
    [JsonProperty(DefaultValueHandling = DefaultValueHandling.Include)]
    [DefaultValue(0)]
    public int IncludeDefaultValue { get; set; }

    // DefaultValue를 30으로 설정하여, 30을 할당한 후 무시되는지 체크
    [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
    [DefaultValue(30)]
    public int IgnoreChangeDefaultValue { get; set; }

    // DefaultValue를 30으로 설정하여, 30이외의 값을 할당한 후 무시되는지 체크
    [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
    [DefaultValue(30)]
    public int IgnoreChangeDefaultValue2 { get; set; }

    // DefaultValue를 30으로 설정하여, int형의 default 값을 할당한 후 무시되는지 체크
    [JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
    [DefaultValue(30)]
    public int IgnoreChangeDefaultValue3 { get; set; }

    // DefaultValue를 30으로 설정하여, 아무것도 할당하지 않고 DeserializeObject시 DefauleValue가 적용되는지 체크
    [JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
    [DefaultValue(30)]
    public int IgnoreChangeDefaultValue4 { get; set; }
}

JsonObject test = new()
{
    IgnoreNullInt = null, // 무시됨.
    IncludeNullInt = null, // 무시 안 됨.
    NotNullInt = 30, // 무시 안 됨.
    IgnoreDefaultValue = 0, // 무시됨.
    IncludeDefaultValue = 0, // 무시 안 됨.
    IgnoreChangeDefaultValue = 30, // 무시됨.
    IgnoreChangeDefaultValue2 = 40, // 무시 안 됨.
    IgnoreChangeDefaultValue3 = default, // 무시 안 됨.
};
string serializeString = JsonConvert.SerializeObject(test, Formatting.Indented);
Console.WriteLine(serializeString);

string testString = @"{
    ""IncludeNullInt"": null,
    ""NotNullInt"": 30,
    ""IncludeDefaultValue"": 0,
    ""IgnoreChangeDefaultValue2"": 40,
    ""IgnoreChangeDefaultValue3"": 0,
  }";

JsonObject obj = JsonConvert.DeserializeObject<JsonObject>(testString);
Console.WriteLine(obj.IgnoreChangeDefaultValue4); // Populate 속성으로 지정되었다면, DefaultValue 에 설정된 값으로 기본값이 적용된다.

Json.NET은 많이 사용되는 .NET Json 라이브러리인데요. 속성에 값을 주지 않을 경우 직렬화 시 무시하고 싶거나, 기본값을 변경하여 조건부로 무시하고 싶을 경우는 어떻게 하는지 알아봤습니다.

DefaultValueHandling.Populate 테스트를 추가했습니다.

6개의 좋아요

Json.NET은 거의 대부분의 프로그래머가 접하는 라이브러리라고 생각하는데, 관련해서 귀한 테스트 자료 감사합니다!

4개의 좋아요
using Newtonsoft.Json;
using System.ComponentModel;

struct JsonObject
{
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public int? IgnoreNullInt { get; set; }

    [JsonProperty(NullValueHandling = NullValueHandling.Include)]
    [?? JsonDefaultValue[0] == JsonObject["{}"]]
    public JsonObject jsonobject { get; set; }
```]

Int형 변수가 아닌 JsonObject에 같은 기능을 사용할 수 있나요?

Jsonobject[0] = "{}" 값이 들어오면 null 또는 다른 아무런 값으로 셋팅하고 싶습니다.
1개의 좋아요