如何反映/映射模型从前端接收到后端模型?



我想为任何从前端接收的ViewModel制作通用的JSON生成器。我在这里发现,我可以从字符串中获得类型,但我不知道如何在我的情况下实现这一点。我的想法是从角数组发送2个值,第一个是字符串,说什么类型是我的ViewModel,第二个值是ViewModel,我需要转换为JSON。(我需要这个JSON后端转换为其他文件格式,我有一些特殊的要求,如更改名称属性等)我使用MediatR,这里是我的类:GenerateJSONQuery是输入对象,我将从前端获得的对象。

public class GenerateJSONQuery<T> : IRequest<string>
{
public string TypeOfList { get; set; }
public List<T> Data { get; set; }
}

GenerateJSONQueryHandlerMediatR的处理程序,它将反射ViewModel并生成JSON

public class GenerateJSONQueryHandler<T> : IRequestHandler<GenerateJSONQuery<T>, string>
{
private readonly IddeeaODPDbContext _context;
private readonly IMapper _mapper;

public GenerateJSONQueryHandler(IddeeaODPDbContext context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}
public async Task<string> Handle(GenerateJSONQuery<T> request, CancellationToken cancellationToken)
{
// logic for generating files, in this part I need to somehow convert 
// `request.Data` to specific List<T> where
//  T can be e.g. `NewbornByBirthDateViewModel`, 
//`IssuedDocumentsViewModel`, `RegisteredVehiclesViewModel`, etc. etc.
}

连接IRequestIRequestHandler的控制器为:

public class GenerateFilesController : ApiBaseController
{
public GenerateFilesController(IOptions<AppSettings> appSettings) : base(appSettings)
{
}
[HttpPost]
[SwaggerOperation(Tags = new[] { "Administration/Document" })]
public async Task<string> List<T>([FromBody] GenerateJSONQuery<T> data, [FromHeader] string Authorization)
{
return await Mediator.Send(data);

}
}

NewbornByBirthDateViewModel是我需要序列化成JSONVieWModel的例子。

public class ClientNewbornByBirthDateViewModel 
{

[TranslatedFieldName("Identifier", LanguageEnum.EN)]
public int Id { get; set; }
public string Institution { get; set; }
[TranslatedFieldName("Men", LanguageEnum.EN)]
public int MaleTotal { get; set; }
[TranslatedFieldName("Women", LanguageEnum.EN)]
public int FemaleTotal { get; set; }
public int Year { get; set; }
public int Month { get; set; }
}

我很确定我的思维方式是不好的,我需要做一些反思,但我不知道怎么做。我不能只从前端发送ViewModel类型,然后从context.Set<T>()中选择所有db,因为可以有过滤器,而这些过滤器取决于选择哪个ViewModel,所以我必须将具有数据的对象从前端传递到JSONGenerate逻辑,然后将其反映到后端特定的ViewModel

应用程序必须首先了解类和它们的类型,然后才能通过将数据类型名称作为参数传递来使用反射。

得到所有的数据类型使用反射,你想要的反映你的数据,然后过滤掉使用TypeOfList.

使用此链接获取名称空间内所有类的详细信息。如何在命名空间中获得所有类?

最新更新