/// <inheritdoc cref="BaseResolver" />
        public override MemberInfo[] GetMemberInfos(Type?type)
        {
            if (type == null)
            {
                return(Array.Empty <MemberInfo>());
            }

            var key = type.FullName;

            if (MemberInfoCache.TryGetValue(key, out MemberInfo[] value))
        /// <inheritdoc cref="BaseResolver" />
        public override string GetMemberName(MemberInfo memberInfo)
        {
            if (memberInfo == null)
            {
                throw new ArgumentNullException(nameof(memberInfo));
            }

            var key = memberInfo.DeclaringType.FullName + '.' + memberInfo.Name;

            if (MemberInfoCache.TryGetValue(key, out string value))
            {
                return(value);
            }

            value = memberInfo.GetCustomAttribute(typeof(DataMemberAttribute), InspectAncestors) is DataMemberAttribute dataMember
                ? dataMember.Name ?? memberInfo.Name
                : memberInfo.Name;
            return(MemberInfoCache.Set(key, value));
        }