コード例 #1
0
        private void AddClassMaps(Type sourceType, Type targetType)
        {
            if (!ClassMaps.Any(item => item.SourceType == sourceType && item.TargetType == targetType))
            {
                ClassMap classMap = new ClassMap(sourceType, targetType);

                ClassMaps.Add(classMap);

                foreach (PropMap propMap in classMap.PropMaps.Where(x => x.IsComposite))
                {
                    if (typeof(IEnumerable).IsAssignableFrom(propMap.SourceProp.Type))
                    {
                        if (propMap.SourceProp.Type.IsGenericType)
                        {
                            AddClassMaps(propMap.SourceProp.Type.GetGenericArguments()[0], propMap.TargetProp.Type.GetGenericArguments()[0]);
                        }
                        else if (propMap.SourceProp.Type.IsArray)
                        {
                            AddClassMaps(propMap.SourceProp.Type.GetElementType(), propMap.TargetProp.Type.GetElementType());
                        }
                    }
                    else
                    {
                        AddClassMaps(propMap.SourceProp.Type, propMap.TargetProp.Type);
                    }
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Registers the given class map to be used when mapping a row to an object.
        /// </summary>
        /// <param name="classType">The type of the class.</param>
        /// <param name="classMap">The class map to use.</param>
        public void RegisterClassMap(Type classType, IMap classMap)
        {
            if (classType == null)
            {
                throw new ArgumentNullException(nameof(classType));
            }
            if (classMap == null)
            {
                throw new ArgumentNullException(nameof(classMap));
            }
            if (ClassMaps.ContainsKey(classType))
            {
                throw new ExcelMappingException($"Class map already exists for type \"{classType.FullName}\"");
            }

            ClassMaps.Add(classType, classMap);
        }