Json.net serializa solo ciertas propiedades

Json.net serializa solo ciertas propiedades

En lugar de tener que usar [JsonIgnore] en cada atributo que no desea serializar como se sugiere en otra respuesta.

Si solo desea especificar propiedades para serializar, puede hacerlo usando [JsonObject(MemberSerialization.OptIn)] y [JsonProperty] atributos, así:

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

Aquí solo Property1 sería serializado.


Puede escribir un ContractResolver personalizado como el siguiente

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

Ahora puede usarlo en su proceso de serialización como:

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

No estoy seguro de por qué @Eser eligió escribir la respuesta como comentario a su pregunta en lugar de una respuesta real... de todos modos, son correctos.

Aplicar el [JsonIgnore] atribuya a cualquier propiedad que desee ignorar.