7

Newtonsoft.Json.JsonConvert(WinForms)をjsonにシリアル化するために使用しTextboxていますが、シリアル化でデフォルト値または空の配列を持つプロパティをスキップしたいです。

で使用しようとし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);

何か案は ?

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 に答える