Example #1
0
        /// <inheritdoc/>
        public ISerializationConverter?GetSerializationConverter(MemberInfo member)
        {
            if (member == null)
            {
                throw new ArgumentNullException(nameof(member));
            }

            if (!(_serializer is DefaultSerializer defaultSerializer))
            {
                // Default behavior
                return(null);
            }

            return(_cache.GetOrAdd(member, p =>
            {
                if (defaultSerializer.SerializerSettings.ContractResolver.ResolveContract(member.DeclaringType) is JsonObjectContract contract)
                {
                    var property = contract.Properties.FirstOrDefault(
                        q => q.UnderlyingName == member.Name && !q.Ignored);
                    if (property != null)
                    {
                        var jsonConverter = GetJsonConverter(property, defaultSerializer);
                        if (jsonConverter != null)
                        {
                            return _converterRegistry.CreateSerializationConverter(jsonConverter, p);
                        }
                    }
                }

                // Default behavior
                return null;
            }));
        }