Estoy tratando de migrar de Newtonsoft.Json a System.Text.Json. Sin embargo, me encontré con un problema porque estaba usando DefaultContractResolver. Mi comportamiento "personalizado" tiene estas reglas para la serialización de propiedades:
Ejemplo:
class Car { [ReadOnly] public string Id { get; set; } public string Name { get; set; } public Person Owner { get; set; } } class Person { [ReadOnly] public string Id { get; set; } public string Name { get; set; } }Ahora, imagina, tenemos estos datos si no se aplicaran reglas.
{ "Id":"1234", "Name":"Skoda", "Owner":{ "Id":"abcd", "Name":null } }Ahora, si serializo el objeto, me gustaría obtener esto en su lugar.
{ "Name":"Skoda" }Para ignorar propiedades individuales, debe usar el atributo [JsonIgnore] junto con una de estas condiciones:
Always ;Never ;WhenWritingDefault ;WhenWritingNull . También puede definir una condición de ignorar predeterminada a través del tipo JsonSerializerOptions .
Si se necesita un comportamiento adicional, debe escribir un convertidor personalizado.
Ejemplo:
class Person { [JsonIgnore(Condition = JsonIgnoreCondition.Always)] public string Id { get; set; } [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string Name { get; set; } }Más información:
Cómo ignorar propiedades con System.Text.Json
Cómo escribir convertidores personalizados para serialización JSON (marshalling) en .NET