如何在强制 "false" 布尔值出现在 JSON 序列化中时忽略过时的字段?
How to omit obsolete fields while forcing "false" boolean values being present in JSON serialisation?
我正在使用来自 NewtonSoft 的 JSON 序列化器。
我想在最后的 JSON 中省略很多字段。为此,我使用了以下 JsonSerializerSettings:
string temp;
JsonSerializerSettings js = new JsonSerializerSettings();
js.DefaultValueHandling = DefaultValueHandling.Ignore;
temp = JsonConvert.SerializeObject(existing_root, Formatting.Indented, js);
这工作正常:确实省略了所有过时的字段。
但是,我有一个布尔字段,我想查看它的值(它是 false),但我不知道该怎么做。我是这样开始的:
[JsonProperty("DIAGNOSTICS")]
public bool DIAGNOSTICS { get; set; }
(我觉得省略这个很正常,看过设置。)
然后我尝试了以下以强制其存在:
[JsonProperty("DIAGNOSTICS")]
public bool DIAGNOSTICS { get; set; } = true;
(我认为,通过将默认值更改为 true
,实际值 (false
) 将不会再被省略,但我错了:该字段仍然从 json.)
有没有人知道如何对序列化程序说:
- "不要省略该特定字段?",或:
- "不要省略为假的布尔值?"
(如果可能,我更喜欢第一种解决方案)
提前致谢
您应该可以将 JsonProperty
属性更改为:
[JsonProperty("DIAGNOSTICS", DefaultValueHandling = DefaultValueHandling.Populate)]
我正在使用来自 NewtonSoft 的 JSON 序列化器。
我想在最后的 JSON 中省略很多字段。为此,我使用了以下 JsonSerializerSettings:
string temp;
JsonSerializerSettings js = new JsonSerializerSettings();
js.DefaultValueHandling = DefaultValueHandling.Ignore;
temp = JsonConvert.SerializeObject(existing_root, Formatting.Indented, js);
这工作正常:确实省略了所有过时的字段。
但是,我有一个布尔字段,我想查看它的值(它是 false),但我不知道该怎么做。我是这样开始的:
[JsonProperty("DIAGNOSTICS")]
public bool DIAGNOSTICS { get; set; }
(我觉得省略这个很正常,看过设置。)
然后我尝试了以下以强制其存在:
[JsonProperty("DIAGNOSTICS")]
public bool DIAGNOSTICS { get; set; } = true;
(我认为,通过将默认值更改为 true
,实际值 (false
) 将不会再被省略,但我错了:该字段仍然从 json.)
有没有人知道如何对序列化程序说:
- "不要省略该特定字段?",或:
- "不要省略为假的布尔值?"
(如果可能,我更喜欢第一种解决方案)
提前致谢
您应该可以将 JsonProperty
属性更改为:
[JsonProperty("DIAGNOSTICS", DefaultValueHandling = DefaultValueHandling.Populate)]