From fe82ce079912ec1eac64ba02cab34a5b8f4c5eec Mon Sep 17 00:00:00 2001 From: DocSvartz Date: Wed, 8 Apr 2026 17:51:20 +0500 Subject: [PATCH] feat: add Flattening mapping for all source type only primitive --- src/Mapster.Tests/WhenFlattening.cs | 33 +++++++++++++++++-- .../Settings/ValueAccessingStrategy.cs | 3 +- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/Mapster.Tests/WhenFlattening.cs b/src/Mapster.Tests/WhenFlattening.cs index da7f64d9..a823a9a6 100644 --- a/src/Mapster.Tests/WhenFlattening.cs +++ b/src/Mapster.Tests/WhenFlattening.cs @@ -1,6 +1,7 @@ -using System; -using Microsoft.VisualStudio.TestTools.UnitTesting; +using Microsoft.VisualStudio.TestTools.UnitTesting; using Shouldly; +using System; +using System.Collections.Generic; using Assert = Microsoft.VisualStudio.TestTools.UnitTesting.Assert; namespace Mapster.Tests @@ -78,12 +79,40 @@ public class ModelDto public string SubSubSubCoolProperty { get; set; } } + public class Source915 + { + public ICollection Cases { get; set; } = new List + { + new Case(), + new Case(), + new Case() + }; + } + + public class Destination915 + { + public int CasesCount { get; set; } + } #endregion + [TestClass] public class WhenFlattening { + + /// + /// https://github.com/MapsterMapper/Mapster/issues/915 + /// + [TestMethod] + public void FlatteningUsingSourceInterface() + { + var source = new Source915(); + var result = source.Adapt(); + + result.CasesCount.ShouldBe(source.Cases.Count); + } + [TestMethod] public void GetMethodTest() { diff --git a/src/Mapster/Settings/ValueAccessingStrategy.cs b/src/Mapster/Settings/ValueAccessingStrategy.cs index fd13407d..f43f5ff3 100644 --- a/src/Mapster/Settings/ValueAccessingStrategy.cs +++ b/src/Mapster/Settings/ValueAccessingStrategy.cs @@ -116,8 +116,7 @@ public static class ValueAccessingStrategy return member.GetExpression(source); var propertyType = member.Type; - if (propertyName.StartsWith(sourceMemberName) && - (propertyType.IsPoco() || propertyType.IsRecordType())) + if (propertyName.StartsWith(sourceMemberName) && !propertyType.IsMapsterPrimitive()) { var exp = member.GetExpression(source); var ifTrue = GetDeepFlattening(exp, propertyName.Substring(sourceMemberName.Length).TrimStart('_'), arg);