private bool IsShallowCopy(MemberDescriptor from, MemberDescriptor to) { return(IsShallowCopy(from.MemberType, to.MemberType)); }
public MappingItem(MemberDescriptor from, MemberDescriptor to, bool shallowCopy) { From = from; To = to; ShallowCopy = shallowCopy; }
private IMappingOperation CreateMappingOperation( HashSet <TypesPair> processedTypes, Type fromRoot, Type toRoot, IEnumerable <MemberInfo> toPath, IEnumerable <MemberInfo> fromPath, MemberInfo fromMi, MemberInfo toMi ) { var origDestMemberDescr = new MemberDescriptor(toPath.Concat(new[] { toMi }).ToArray()); var origSrcMemberDescr = new MemberDescriptor(fromPath.Concat(new[] { fromMi }).ToArray()); if (ReflectionUtils.IsNullable(ReflectionUtils.GetMemberType(fromMi))) { fromPath = fromPath.Concat(new[] { fromMi }); fromMi = ReflectionUtils.GetMemberType(fromMi).GetProperty("Value"); } if (ReflectionUtils.IsNullable(ReflectionUtils.GetMemberType(toMi))) { toPath = fromPath.Concat(new[] { toMi }); toMi = ReflectionUtils.GetMemberType(toMi).GetProperty("Value"); } var destMemberDescr = new MemberDescriptor(toPath.Concat(new[] { toMi }).ToArray()); var srcMemberDescr = new MemberDescriptor(fromPath.Concat(new[] { fromMi }).ToArray()); Type typeFromMember = srcMemberDescr.MemberType; Type typeToMember = destMemberDescr.MemberType; bool shallowCopy = IsShallowCopy(srcMemberDescr, destMemberDescr); if ( IsNativeDeepCopy(typeFromMember, typeToMember, srcMemberDescr.MemberInfo, destMemberDescr.MemberInfo, shallowCopy) && !processedTypes.Contains(new TypesPair(typeFromMember, typeToMember)) ) { return (new ReadWriteComplex() { Destination = origDestMemberDescr, Source = origSrcMemberDescr, ShallowCopy = shallowCopy, Operations = GetMappingItems( processedTypes, srcMemberDescr.MemberType, destMemberDescr.MemberType, null, null ) }); } else { return (new ReadWriteSimple() { Source = origSrcMemberDescr, Destination = origDestMemberDescr, ShallowCopy = shallowCopy, }); } }