我试图弄清楚如何序列化到json对象,并跳过值为空列表的序列化属性。我不使用Newtonsoft json
using System.Text.Json;
using System.Text.Json.Serialization;
using AutoMapper;
我有一个有财产的对象。
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
[JsonPropertyName("extension")]
public List<Extension> Extension { get; set; }
当我尝试使用以下方法序列化此对象时
var optionsJson = new JsonSerializerOptions
{
WriteIndented = true,
IgnoreNullValues = true,
PropertyNameCaseInsensitive = true,
};
var json = JsonSerializer.Serialize(report, optionsJson);
它仍然给了我一个空数组:
"extension": [],
难道没有办法阻止它序列化这些空列表吗?我想看到extension
走了。它不应该在那里。我需要这样做,因为如果我发送:
"extension": null,
序列化时,它不能是对象的一部分。
网关错误
我不想要这些空列表的原因是,我要发送给对象的第三方网关为空列表。
“严重性”:“错误”、“代码”:“处理”、“诊断”:“数组不能为空--如果没有值,属性就不应该存在”、“位置”:[ "Bundle.entry2.resource.extension“、”第96行、Col 23“]
我试着避免在这上面做一些讨厌的字符串替换。
发布于 2022-03-09 13:16:33
您可以添加一个在序列化期间使用的虚拟属性来处理这个问题。
JsonPropertyNameAttribute
标记它以确保它被用正确的名称序列化,也用JsonIgnoreAttribute
标记,这样它在返回null时不会被序列化。无条件地将您用JsonIgnore标记的原始属性
null
(从而被忽略),否则它将返回(非空)列表H 29H 110写入虚拟属性,只是写到实际属性H 211f 212。
就像这样:
[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();
}
https://stackoverflow.com/questions/71409542
复制相似问题