7

我正在使用Newtonsoft.Json.JsonConvertTextbox(WinForms)序列化为 json,并且我希望序列化跳过具有默认值或空数组的属性。

我尝试使用NullValueHandling = NullValueHandling.IgnoreinJsonSerializerSettings但似乎没有任何影响。

这是完整的代码示例(简化):

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);

有任何想法吗 ?

4

1 回答 1

8

您可以使用标准的条件序列化模式:

private int bar = 6; // default value of 6
public int Bar { get { return bar;} set { bar = value;}}
public bool ShouldSerializeBar()
{
    return Bar != 6;
}

关键是一个public bool ShouldSerialize*()方法,其中*的成员名称。这种模式也被XmlSerializer、protobuf-netPropertyDescriptor等使用。

当然,这确实意味着您需要访问该类型。

于 2012-07-24T10:02:31.470 回答