Json.net serialisiert nur bestimmte Eigenschaften

Json.net serialisiert nur bestimmte Eigenschaften

Anstatt [JsonIgnore] verwenden zu müssen bei jedem Attribut, das Sie nicht wie in einer anderen Antwort vorgeschlagen serialisieren möchten.

Wenn Sie nur zu serialisierende Eigenschaften angeben möchten, können Sie dies mit [JsonObject(MemberSerialization.OptIn)] tun und [JsonProperty] Attribute, etwa so:

using Newtonsoft.Json;
...
[JsonObject(MemberSerialization.OptIn)]
public class Class1
{
    [JsonProperty]
    public string Property1 { set; get; }
    public string Property2 { set; get; }
}

Hier nur Property1 würden serialisiert werden.


Sie können einen benutzerdefinierten ContractResolver wie unten schreiben

public class IgnoreParentPropertiesResolver : DefaultContractResolver
{
    bool IgnoreBase = false;
    public IgnoreParentPropertiesResolver(bool ignoreBase)
    {
        IgnoreBase = ignoreBase;
    }
    protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
    {
        var allProps = base.CreateProperties(type, memberSerialization);
        if (!IgnoreBase) return allProps;

        //Choose the properties you want to serialize/deserialize
        var props = type.GetProperties(~BindingFlags.FlattenHierarchy); 

        return allProps.Where(p => props.Any(a => a.Name == p.PropertyName)).ToList();
    }
}

Jetzt können Sie es in Ihrem Serialisierungsprozess verwenden als:

var settings = new JsonSerializerSettings() { 
                      ContractResolver = new IgnoreParentPropertiesResolver(true) 
               };
var json1 = JsonConvert.SerializeObject(new SubObjectWithOnlyDeclared(),settings );

Ich bin mir nicht sicher, warum @Eser sich dafür entschieden hat, die Antwort als Kommentar zu Ihrer Frage zu schreiben, im Gegensatz zu einer tatsächlichen Antwort ... wie auch immer, sie sind richtig.

Wenden Sie den [JsonIgnore] an Attribut jeder Eigenschaft, die Sie ignorieren möchten.