如何在使用Newtonsoft.Json序列化json时忽略默认值

时间:2012-07-24 09:53:31

标签: c# json json.net

我使用Newtonsoft.Json.JsonConvertTextbox(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);

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

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

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-net,PropertyDescriptor等也使用此模式。

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