【问题标题】:Ignoring a particular attribute using JsonSerializer ContractResolver使用 JsonSerializer ContractResolver 忽略特定属性
【发布时间】:2021-02-25 18:16:15
【问题描述】:

我正在使用 JsonSerializer ContractResolver 来忽略空列表。我想再添加一个条件来忽略 具有特定名称的属性

 var serilaizeJson = JsonConvert.SerializeObject(result, Formatting.None,
                new JsonSerializerSettings
                {
                    ContractResolver = SerializeContractResolver.Instance
                });




protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
        {
            JsonProperty property = base.CreateProperty(member, memberSerialization);

            if (property.PropertyType != typeof(string))
            {
                if (property.PropertyType.GetInterface(nameof(IEnumerable)) != null)
                    property.ShouldSerialize =
                        instance => (instance?.GetType().GetProperty(property.PropertyName).GetValue(instance) as IEnumerable<object>)?.Count() > 0 && .;
            }
            return property;
        }

是否有任何方法可以将检查与当前检查合并,如果属性名称为 CreatedOn 则忽略它。它是一种字符串值。

【问题讨论】:

  • 忽略具有特定名称的属性是什么意思?您的意思是忽略具有特定名称的属性?你能分享一个minimal reproducible example 显示你想要序列化的类型,以及你想要使用你的合约解析器的结果吗?

标签: c# json json.net dynamic-programming nsjsonserialization


【解决方案1】:

你可以这样使用:

bool yourAttributeIsOnTheProperty = member.GetCustomAttributes(typeof(CreatedOn), false).Any();

【讨论】:

  • 我会在哪里提供属性名称??我想忽略一个特定的属性,在这个属性名称是“CreatedOn”
  • 是否要忽略特定属性(名为 CreatedOn)所在的属性?
  • 是的,正确的。我想将其与我现有的检查结合起来。
  • 我根据您的要求更改了答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 2021-10-09
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多