コード例 #1
0
        /// <summary>
        /// Mapping配置实体类型。
        /// </summary>
        /// <param name="type"></param>
        /// <param name="element"></param>
        /// <returns></returns>
        public object Mapping(Type type, XElement element, IConvertCaseStrategy convertCaseStrategy)
        {
            // 获取mappinger选择器
            IMappinger mappinger = MappingerSelector.Get(type, convertCaseStrategy);

            convertCaseStrategy = convertCaseStrategy ?? new DefaultConvertCaseStrategy();

            // 如果不是entity,直接执行返回值
            if (!(mappinger is EntityMappinger))
            {
                mappinger.ConvertCaseStrategy = convertCaseStrategy;
                return(mappinger.Mapping(element, type));
            }


            // 创建实例
            var instance = Activator.CreateInstance(type);

            // 创建 mapping
            ITypeMapping typeMapping = MappingFactory.CreateMapping(type, element, convertCaseStrategy);

            // 执行
            typeMapping.Apply(instance);
            return(instance);
        }
コード例 #2
0
        public object Mapping(XElement element, Type type)
        {
            var listType  = typeof(List <>);
            var arrayType = type.GetElementType();

            listType = listType.MakeGenericType(arrayType);

            IMappinger mappinger = MappingerSelector.Get(listType, ConvertCaseStrategy);

            var list = mappinger.Mapping(element, listType);


            return((Array)listType.GetMethod("ToArray").Invoke(list, null));
        }
コード例 #3
0
        /// <summary>
        /// 根据类型选择不同的Mappinger
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public static IMappinger Get(Type type, IConvertCaseStrategy convertCaseStrategy)
        {
            var canMappingers = _mappingers.Where(i => i.IsCanMapping(type)).ToList();

            if (canMappingers.Count > 1)
            {
                throw new SuperConfigException($"出现多个Mapping选择器!");
            }

            IMappinger mappinger = canMappingers.Count == 0 ? new EntityMappinger() : canMappingers.First();

            mappinger.ConvertCaseStrategy = convertCaseStrategy;

            return(mappinger);
        }
コード例 #4
0
        /// <summary>
        /// 获取key value值
        /// </summary>
        /// <param name="element"></param>
        /// <param name="mappinger"></param>
        /// <param name="type"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        private object GetValue(XElement element, IMappinger mappinger, Type type, string name)
        {
            var attribute = element.Attributes().Where(i => i.Name == name).FirstOrDefault();

            if (attribute != null)
            {
                return(attribute.Value);
            }

            var ele = element.Elements().Where(i => i.Name == name).FirstOrDefault();

            if (ele != null)
            {
                return(mappinger.Mapping(ele, type));
            }

            return(null);
        }
コード例 #5
0
 public MappingForElement(XElement element, PropertyInfo property, IMappinger mappinger)
 {
     _element   = element;
     _property  = property;
     _mappinger = mappinger;
 }