private bool IsIgnored(Type type, string jsonPropertyName, string propertyName) { if (_configuration != null && _configuration.ContainsRecordConfigForType(type)) { var dict = _configuration.JSONRecordFieldConfigurationsForType[type]; if (dict != null && dict.ContainsKey(jsonPropertyName)) { return(false); } } if (!_ignores.ContainsKey(type)) { var pd = ChoTypeDescriptor.GetProperty(type, propertyName); return(pd != null?pd.Attributes.OfType <ChoIgnoreMemberAttribute>().Any() : true); } return(_ignores[type].Contains(jsonPropertyName)); }
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) { var property = base.CreateProperty(member, memberSerialization); var propertyFullName = member.GetFullName(); if (IsIgnored(property.DeclaringType, property.PropertyName, property.UnderlyingName, propertyFullName)) { property.ShouldSerialize = i => false; property.Ignored = true; } if (IsRenamed(property.DeclaringType, property.PropertyName, property.UnderlyingName, propertyFullName, out var newJsonPropertyName)) { if (!newJsonPropertyName.IsNullOrWhiteSpace()) { property.PropertyName = newJsonPropertyName; } } if (_configuration.ContainsRecordConfigForType(property.DeclaringType)) { var dict = _configuration.JSONRecordFieldConfigurationsForType[property.DeclaringType]; if (dict != null && dict.ContainsKey(property.UnderlyingName)) { property.Converter = property.MemberConverter = new ChoContractResolverJsonConverter(dict[property.UnderlyingName], _configuration.Culture, property.PropertyType, _configuration.ObjectValidationMode, member); } } else if (_configuration.JSONRecordFieldConfigurations.Any(f => f.DeclaringMember == propertyFullName)) { var fc = _configuration.JSONRecordFieldConfigurations.First(f => f.DeclaringMember == propertyFullName); property.MemberConverter = new ChoContractResolverJsonConverter(fc, _configuration.Culture, property.PropertyType, _configuration.ObjectValidationMode, member); property.DefaultValue = fc.DefaultValue; property.Order = fc.Order; } else if (_configuration.JSONRecordFieldConfigurations.Any(f => f.Name == propertyFullName)) { var fc = _configuration.JSONRecordFieldConfigurations.First(f => f.Name == propertyFullName); property.MemberConverter = new ChoContractResolverJsonConverter(fc, _configuration.Culture, property.PropertyType, _configuration.ObjectValidationMode, member); property.DefaultValue = fc.DefaultValue; property.Order = fc.Order; } else { var pd = ChoTypeDescriptor.GetProperty(property.DeclaringType, property.UnderlyingName); if (pd != null) { if (pd.Attributes.OfType <DefaultValueAttribute>().Any()) { property.DefaultValue = pd.Attributes.OfType <DefaultValueAttribute>().First().Value; } if (pd.Attributes.OfType <ChoJSONRecordFieldAttribute>().Any()) { property.Order = pd.Attributes.OfType <ChoJSONRecordFieldAttribute>().First().Order; } } } if (_configuration.NullValueHandling == ChoNullValueHandling.Ignore) { property.NullValueHandling = NullValueHandling.Ignore; } else { property.NullValueHandling = NullValueHandling.Include; } return(property); }