Ejemplo n.º 1
0
            public void Map(ref MapperInfo _Info, ref object from, ref object to)
            {
                var dic = from as IDictionary<string, TValue>;
                IDictionary<string, TValue> tmpDic = dic;

                if (_Info.IgnoreCase)
                    tmpDic = new Dictionary<string, TValue>(dic, _Info.IgnoreCase ? StringComparer.InvariantCultureIgnoreCase : StringComparer.InvariantCulture);

                var tmpMembers = _Info
                    .DestinationMembers
                    .Where(m => m.MemberType == MemberTypes.Field || m.MemberType == MemberTypes.Property)
                    .ToArray();

                var keys = tmpDic.Keys.ToList();

                var ms = tmpMembers;
                foreach (var key in keys)
                {
                    var tmpValue = tmpDic[key];
                    var m = ms.FirstOrDefault(s => string.Equals(s.Name, key, StringComparison.OrdinalIgnoreCase));
                    if (m != null)
                        BindProperty(ref to, tmpValue, m);
                    else
                        BindSubProperty(ref to, key, tmpValue);
                }
                tmpDic.Clear();
                tmpDic = null;
            }
Ejemplo n.º 2
0
 protected MapperBase(Type fromType, Type toType)
 {
     Key   = fromType.FullName + "->" + toType.FullName;
     _Info = new MapperInfo
     {
         From = fromType
         ,
         To = toType
         ,
         Key = this.Key
     };
 }
Ejemplo n.º 3
0
        public MemberMapping(MapperInfo mapperInfo, MemberModel from, MemberModel to, string fromMemberPath)
        {
            _Info          = mapperInfo;
            From           = from;
            To             = to;
            from.GetMember = from.Member.GetGetter();
            to.SetMember   = to.Member.GetSetter();

            //FromMemberPath = fromMemberPath;
            Key = From.Type.FullName + "->" + To.Type.FullName;

            if (to.Type != from.Type && !to.Type.IsAssignableFrom(from.Type))
            {
                MemberMapper = CreateMapperMethod.MakeGenericMethod(from.Type, to.Type).Invoke(Mapper.Current, null) as IMapper;
            }

            if (!string.IsNullOrEmpty(fromMemberPath))
            {
                var members = fromMemberPath.Split('.');
                var length  = members.Length;
                if (length > 1)
                {
                    MemberPaths = new Getter[length - 1];
                    var subObjectType = from.Type;
                    for (int i = 1; i < length; i++)
                    {
                        var subMember = subObjectType
                                        .GetMember(members[i])
                                        .FirstOrDefault();
                        if (subMember == null)
                        {
                            break;
                        }
                        MemberPaths[i - 1] = subMember.GetGetter();
                        subObjectType      = subMember.GetMemberType();
                    }
                }
            }
        }