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.