MapsterMapper / Mapster

A fast, fun and stimulating object to object Mapper
MIT License
4.39k stars 331 forks source link

When using TypeAdapterConfig.GlobalSettings.Default.IgnoreNullValues(true), it causes the Mapper function to be called twice. #737

Open jiuzhou2019 opened 5 days ago

jiuzhou2019 commented 5 days ago

There is example code following this. When Adapt() is called, it can be seen from the console that SummaryDetail runs twice. I would like to ask what is the reason for this and how to avoid it. I have also uploaded the test code for the entire project in the attachment. Thank you all for helping me answer this.

Please attach the test code file, and I will take a look to provide further assistance.

TestMapster.zip

Program.cs:

TypeAdapterConfig.GlobalSettings.Default.IgnoreNullValues(true);
TypeAdapterConfig.GlobalSettings.Scan(Assembly.Load("TestMapster"));

TestInput.cs:

public class TestInput
{
    public string Summary { get; set; }
}

public class TestView
{
    public string Summary { get; set; }
}

MapperConfig.cs

public class MapperConfig : IRegister
{
    public void Register(TypeAdapterConfig config)
    {
        config.ForType<TestInput, TestView>()
       .Map(dest => dest.Summary, src => SummaryDetail(src.Summary))
       ;
    }

    private static string SummaryDetail(string s)
    {
        Console.WriteLine($"================{s}================");
        return s + " plus";
    }
}

Controller.cs

    [HttpGet]
    public TestView Get()
    {
        var input = new TestInput { Summary = "Hello World" };
        return input.Adapt<TestView>();
    }
jiuzhou2019 commented 5 days ago

The attachment did not upload successfully, I am re-uploading it here. TestMapster.zip