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 ํ ์คํธ๋ฅผ ์ถ๊ฐํ์ต๋๋ค.