private SerializableType CompileInterfaceTypes(Type type)
        {
            bool           isArray         = type.IsArray;
            bool           flag            = false;
            bool           flag1           = false;
            MemberAccessor memberAccessor  = null;
            MemberAccessor memberAccessor1 = null;
            MethodAccessor methodAccessor  = null;
            Type           type1           = null;

            if (type.GetInterface(typeof(IAmqpSerializable).Name, false) != null)
            {
                return(SerializableType.CreateAmqpSerializableType(this, type));
            }
            Type[] interfaces = type.GetInterfaces();
            for (int i = 0; i < (int)interfaces.Length; i++)
            {
                Type type2 = interfaces[i];
                if (type2.IsGenericType)
                {
                    Type genericTypeDefinition = type2.GetGenericTypeDefinition();
                    if (genericTypeDefinition == typeof(IDictionary <,>))
                    {
                        flag = true;
                        Type[] genericArguments = type2.GetGenericArguments();
                        type1           = typeof(KeyValuePair <,>).MakeGenericType(genericArguments);
                        memberAccessor  = MemberAccessor.Create(type1.GetProperty("Key"), false);
                        memberAccessor1 = MemberAccessor.Create(type1.GetProperty("Value"), false);
                        methodAccessor  = MethodAccessor.Create(type.GetMethod("Add", genericArguments));
                        break;
                    }
                    else if (genericTypeDefinition == typeof(IList <>))
                    {
                        flag1 = true;
                        Type[] typeArray = type2.GetGenericArguments();
                        type1          = typeArray[0];
                        methodAccessor = MethodAccessor.Create(type.GetMethod("Add", typeArray));
                        break;
                    }
                }
            }
            if (flag)
            {
                return(SerializableType.CreateMapType(this, type, memberAccessor, memberAccessor1, methodAccessor));
            }
            if (isArray || !flag1)
            {
                return(null);
            }
            return(SerializableType.CreateListType(this, type, type1, methodAccessor));
        }