Estoy tratando de descubrir cómo serializar en un objeto json y omitir la serialización de propiedades cuyos valores son listas vacías. No estoy usando Newtonsoft json
using System.Text.Json; using System.Text.Json.Serialization; using AutoMapper;Tengo un objeto con una propiedad.
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("extension")] public List<Extension> Extension { get; set; }Cuando intento serializar este objeto usando lo siguiente
var optionsJson = new JsonSerializerOptions { WriteIndented = true, IgnoreNullValues = true, PropertyNameCaseInsensitive = true, }; var json = JsonSerializer.Serialize(report, optionsJson);Todavía me da una matriz vacía:
"extension": [], ¿No hay una manera de evitar que serialice estas listas vacías? Me gustaría ver la extension desaparecida. No debería estar allí en absoluto. Necesito hacer esto porque la puerta de enlace responderá con un error si envío:
"extension": null,No debe ser parte del objeto cuando se serializa.
La razón por la que no quiero estas listas vacías es que la puerta de enlace de terceros que estoy enviando objetos a listas vacías
"gravedad": "error", "código": "procesamiento", "diagnóstico": "La matriz no puede estar vacía; la propiedad no debe estar presente si no tiene valores", "ubicación": [ "Bundle.entry[2 ].resource.extension", "Línea 96, Col 23" ]
Estoy tratando de evitar hacer algún tipo de reemplazo de cadena desagradable en esto.
Puede agregar una propiedad ficticia que se usa durante la serialización que maneja esto.
JsonPropertyNameAttribute para asegurarse de que se serialice con el nombre correcto y también con JsonIgnoreAttribute para que no se serialice cuando devuelva un valor nulo.null (y, por lo tanto, se ignoraría) cuando la propiedad real contiene una lista vacía; de lo contrario, devolvería esa lista (no vacía).Algo como esto:
[JsonIgnore] public List<Extension> Extensions { get; set; } = new(); [JsonPropertyName("extension")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public List<Extension> SerializationExtensions { get => Extensions?.Count > 0 ? Extensions : null; set => Extensions = value ?? new(); }