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)); }