Example #1
0
        public static ObjectMapperData For <TSource, TTarget>(IObjectMappingData mappingData)
        {
            int?dataSourceIndex;
            ObjectMapperData parentMapperData;
            IMembersSource   membersSource;

            if (mappingData.IsRoot)
            {
                parentMapperData = null;
                membersSource    = mappingData.MappingContext.MapperContext.RootMembersSource;
                dataSourceIndex  = null;
            }
            else
            {
                parentMapperData = mappingData.Parent.MapperData;
                membersSource    = mappingData.MapperKey.GetMembersSource(parentMapperData);
                dataSourceIndex  = membersSource.DataSourceIndex;
            }

            var sourceMember = membersSource.GetSourceMember <TSource, TTarget>().WithType(typeof(TSource));
            var targetMember = membersSource.GetTargetMember <TSource, TTarget>().WithType(typeof(TTarget));

            return(new ObjectMapperData(
                       mappingData,
                       sourceMember,
                       targetMember,
                       dataSourceIndex,
                       mappingData.DeclaredTypeMappingData?.MapperData,
                       parentMapperData,
                       mappingData.IsStandalone()));
        }
Example #2
0
        private static bool ChildMappersNeeded(IObjectMappingData mappingData)
        {
            while (!mappingData.IsStandalone())
            {
                mappingData = mappingData.Parent;
            }

            return(mappingData.MapperData.Context.NeedsSubMapping);
        }
Example #3
0
        public override bool IsFor(IObjectMappingData mappingData)
        {
            if (mappingData.MapperData.TargetMember.IsDictionary)
            {
                return(true);
            }

            if (mappingData.IsRoot)
            {
                return(false);
            }

            if (!(mappingData.MapperData.TargetMember is DictionaryTargetMember dictionaryMember))
            {
                return(false);
            }

            if (dictionaryMember.HasSimpleEntries)
            {
                return(true);
            }

            return(dictionaryMember.HasObjectEntries && !mappingData.IsStandalone());
        }