You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求不使用AutoMapper实现Student与StudentDTO的对象映射方法

手动实现Student与StudentDTO的对象映射(不依赖AutoMapper)

没问题,咱们完全可以手动编写映射逻辑来完成这两个类之间的转换,不需要依赖AutoMapper这类第三方库。手动映射的好处是逻辑完全可控,也不会引入额外的依赖。

首先得补充一下你没给出的Faculty和FacultyDTO类的定义(毕竟你的Student类里用到了这两个嵌套对象),假设它们的结构是这样的:

// 原实体类的枚举
public enum Faculty
{
    ComputerScience,
    Mathematics,
    Physics
}

// DTO类的枚举
public enum FacultyDTO
{
    ComputerScience,
    Mathematics,
    Physics
}

接下来,咱们可以用扩展方法来实现双向转换,这种方式调用起来会更优雅:

public static class StudentMappingExtensions
{
    // 将Student转换为StudentDTO
    public static StudentDTO ToStudentDTO(this Student student)
    {
        if (student == null)
            return null;

        return new StudentDTO
        {
            Name = student.Name,
            Id = student.Id,
            // 因为两个枚举的成员名称一致,直接强制转换即可
            FacultyName = (FacultyDTO)Enum.Parse(typeof(FacultyDTO), student.FacultyName.ToString())
        };
    }

    // 将StudentDTO转换为Student
    public static Student ToStudent(this StudentDTO studentDto)
    {
        if (studentDto == null)
            return null;

        var student = new Student
        {
            Name = studentDto.Name,
            Id = studentDto.Id,
            FacultyName = (Faculty)Enum.Parse(typeof(Faculty), studentDto.FacultyName.ToString())
        };

        // Student类的hw方法是实例方法,创建对象后自动拥有,无需额外处理
        // 内部类many属于Student的私有结构,DTO中没有对应,也不需要处理
        return student;
    }
}

调用示例

使用的时候就像调用类的原生方法一样简单:

// 创建一个Student实例
var originalStudent = new Student
{
    Name = "Srikanth",
    Id = 1001,
    FacultyName = Faculty.ComputerScience
};

// 转成StudentDTO
var studentDto = originalStudent.ToStudentDTO();

// 再转回Student
var convertedStudent = studentDto.ToStudent();

额外注意点

  • 如果Faculty和FacultyDTO的枚举成员名称不一致,你需要用switch-case手动对应映射关系,避免转换出错
  • 一定要处理null值,防止空引用异常
  • 后续如果类的属性有增减,记得同步更新映射方法里的逻辑

内容的提问来源于stack exchange,提问作者Srikanth Rokkam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:17:48