使用 JSON 文件中提供的列映射信息在运行时映射两个类

问题描述 投票:0回答:1

我有两个这样的课程。

public class InputModel
{        
    public int studentid { get; set; }        
    public string studentname { get; set; }       
    public string studentcity { get; set; }
}

public class OutputModel
{
    public int StudentIDColumn { get; set; }
    public string StudentNameColumn { get; set; }
    public string StudentCityColumn { get; set; }
}

现在的需求是这样的:

我将收到一个

InputModel
类的对象。由此,我需要创建一个
OutputModel
类的对象。

如果我们使用像 AutoMapper 这样的库,那就很简单了。但问题是,列到列映射信息将通过 Json 文件提供,如下所示:

{
  "studentid": "StudentIDColumn",
  "studentname": "StudentNameColumn",
  "studentcity": "StudentCityColumn"
}

基于JSON映射数据,我需要在运行时映射列并生成输出类对象。

我尝试使用 Automapper 映射这两个类。但我不确定如何在运行时使用 JSON 文件来完成此操作。

var MapperConfig = new MapperConfiguration(c => 
            c.CreateMap<InputCSVModel, OutputIDMModel>()
            .ForMember(dest => dest.StudentIDColumn, act => act.MapFrom(src => src.studentid))
            .ForMember(dest => dest.StudentNameColumn, act => act.MapFrom(src => src.studentname))
            .ForMember(dest => dest.StudentCityColumn, act => act.MapFrom(src => src.studentcity))
            );
            
var mapper = new Mapper(MapperConfig);                

OutputIDMModel outModel = mapper.Map<OutputIDMModel>(inputModel);

我怎样才能实现这个目标?

也许可以通过反射来做到这一点,但我不知道如何实现。

c# asp.net-core automapper
1个回答
1
投票

我能够读取 JSON 文件并在自动映射器配置中传递字符串,如下所示。

var MapperConfig = new MapperConfiguration(c =>
            c.CreateMap<InputModel, OutputModel>()
            .ForMember("StudentIDColumn", opt => opt.MapFrom("studentid"))
            .ForMember("StudentNameColumn", opt => opt.MapFrom("studentname"))
            .ForMember("StudentCityColumn", opt => opt.MapFrom("studentcity"))
            );
© www.soinside.com 2019 - 2024. All rights reserved.