我正在使用Newtonsoft.Json.JsonConvert序列化Textbox(WinForms)到json,我希望序列化跳过具有默认值或空数组的属性.
我试图使用NullValueHandling = NullValueHandling.Ignore,JsonSerializerSettings但似乎并没有影响任何东西.
这是完整的代码示例(简化):
JsonSerializerSettings settings = new JsonSerializerSettings()
{
Formatting = Formatting.None,
DefaultValueHandling = DefaultValueHandling.Ignore,
NullValueHandling = NullValueHandling.Ignore,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
ObjectCreationHandling = ObjectCreationHandling.Replace,
PreserveReferencesHandling = PreserveReferencesHandling.None,
ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor,
};
string json = JsonConvert.SerializeObject(textbox, settings);
Run Code Online (Sandbox Code Playgroud)
有任何想法吗 ?
您可以使用标准条件序列化模式:
private int bar = 6; // default value of 6
public int Bar { get { return bar;} set { bar = value;}}
public bool ShouldSerializeBar()
{
return Bar != 6;
}
Run Code Online (Sandbox Code Playgroud)
关键是一个public bool ShouldSerialize*()方法,其中*是成员名称.这种模式也被XmlSerializerprotobuf-net PropertyDescriptor等使用.
当然,这确实意味着您需要访问该类型.