JSON序列化时始终忽略特定属性?解决配置冲突异常
解决方法
针对你的问题,有几种可靠的处理方案:
方案1:确保使用正确的[JsonIgnore]特性
你已经给辅助属性添加了[JsonIgnore]但未生效,大概率是引用了错误的命名空间。微软JSON序列化(System.Text.Json)对应的特性是System.Text.Json.Serialization.JsonIgnoreAttribute,而非Newtonsoft.Json的同名特性。
修正后的代码:
using System.Text.Json.Serialization; public class YourClass { public DateTime? Start { get; set; } public DateTime? End { get; set; } [JsonIgnore] public DateTime StartForComparison => Start ?? DateTime.MinValue; [JsonIgnore] public DateTime EndForComparison => End ?? DateTime.MaxValue; }
这个特性会强制让属性始终被序列化忽略,不需要额外修改全局配置。
方案2:通过全局配置忽略特定属性(替代特性)
如果不想给单个属性加特性,可以通过自定义类型信息来全局排除这些辅助属性:
builder.Services.ConfigureHttpJsonOptions(options => { options.SerializerOptions.TypeInfoResolver = new DefaultJsonTypeInfoResolver { Modifiers = { typeInfo => { if (typeInfo.Type == typeof(YourClass)) { // 移除要忽略的属性 var startProp = typeInfo.Properties.FirstOrDefault(p => p.Name == nameof(YourClass.StartForComparison)); if (startProp != null) typeInfo.Properties.Remove(startProp); var endProp = typeInfo.Properties.FirstOrDefault(p => p.Name == nameof(YourClass.EndForComparison)); if (endProp != null) typeInfo.Properties.Remove(endProp); } } } }; options.SerializerOptions.WriteIndented = true; });
这种方式适合需要批量处理多个类中同名辅助属性的场景。
为什么之前的全局配置报错?
你遇到的“设置'Always'属性不被允许”异常,是因为在.NET 6及更早版本中,JsonIgnoreCondition.Always不允许被设置为DefaultIgnoreCondition的值(该枚举值仅支持特性级别的配置)。只有.NET 7及以上版本才允许全局设置DefaultIgnoreCondition = JsonIgnoreCondition.Always。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

