如何使用 Mapster 映射继承的类

Bri*_*ice 6 c# mapping mapster

我想通过使用以下语句在两个类之间进行映射:

var directoryDataModel = new DirectoryDM()
{
    Title = "School Directory",
    Persons = new List<PersonDM>()
    {
        new TeacherDM() { Name = "Johnson", Department = "Math" },
        new StudentDM() { Name = "Billy", Classes = new List<string>() { "Math", "Physics" } }
    }                
};
var directoryViewModel = directoryDataModel.Adapt<DirectoryVM>();
var directoryDataModel2 = directoryViewModel.Adapt<DirectoryDM>();
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能处理 Persons 列表中派生类的映射?

TeacherVM <=> TeacherDM 和 StudentVM <=> StudentDM

数据模型:

public class DirectoryDM
{
    public string Title;
    public List<PersonDM> Persons;
}
public class PersonDM
{
    public string Name;
}
public class TeacherDM : PersonDM
{
    public string Department;
}
public class StudentDM : PersonDM
{
    public List<string> Classes;
}
Run Code Online (Sandbox Code Playgroud)

查看型号:

public class DirectoryVM
{
    public string Title;
    public List<PersonVM> Persons;
    public bool AdditionalStuff;
}
public class PersonVM
{
    public string Name;
    public bool AdditionalStuff;
}
public class TeacherVM : PersonVM
{
    public string Department;
    public bool AdditionalStuff2;
}
public class StudentVM : PersonVM
{
    public List<string> Classes;
    public bool AdditionalStuff2;
}
Run Code Online (Sandbox Code Playgroud)

Bri*_*ice 9

我不确定是否必须每次都执行此操作...或者只执行一次...但以下是如何组织该模型的“配置”。

            TypeAdapterConfig<PersonDM, PersonVM>.NewConfig()
                .Include<TeacherDM, TeacherVM>()
                .Include<StudentDM, StudenVM>();

            var viewModel = dataModel.Adapt<FlexSortVM>();
Run Code Online (Sandbox Code Playgroud)

            TypeAdapterConfig<PersonVM, PersonDM>.NewConfig()
                .Include<TeacherVM, TeacherDM>()
                .Include<StudentVM, StudenDM>();

            var dataModel = viewModel.Adapt<FlexSortDM>();
Run Code Online (Sandbox Code Playgroud)