Mik*_*ger 3 automapper asp.net-core
我正在尝试将我的实体映射到一个新结构中。
我的实体看起来像:
public class Settings
{
public int Id { get; protected set; }
public int UserId { get; set; }
string string Property{ get; set; }
public string Element { get; set; }
public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
所以从数据库中会出现类似(其中值是一些基于 json 的值)
UserId Property Element Value
----------- ---------- -------- ------
15 std1 grid [...]
15 std1 panel [...]
15 std2 panel [...]
15 std2 grid [...]
15 std4 panel [...]
15 std5 panel [...]
15 std12 grid [...]
Run Code Online (Sandbox Code Playgroud)
我的目标是输出结构如下:
{
"std1": {
"Elements": {
"grid": "[...]",
"panel": "[...]"
}
},
"std2": {
"Elements": {
"grid": "[...]",
"panel": "[...]"
}
},
"std4": {
"Elements": {
"panel": "[...]"
}
},
...
}
Run Code Online (Sandbox Code Playgroud)
我创建了以下 DTO 来实现这一点:
public class SettingsToReturnDto
{
public string Domain { get; set; }
public List<ElementsToReturnDto> Elements { get; set; }
}
public class ElementsToReturnDto
{
public string Element { get; set; }
public string Value { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用自动映射器映射来实现这一点,但我所有的尝试都未能转换为新结构
你能指出我正确的方向吗?谢谢
这是工作演示,您可以参考
设置配置文件
public class SettingsProfile:Profile
{
public SettingsProfile()
{
CreateMap<IGrouping<string, Settings>, SettingsToReturnDto>()
.ForMember(dest => dest.Domain, opt => opt.MapFrom(src => src.Key))
.ForMember(dest => dest.Elements, opt => opt.MapFrom(src => src.ToList()));
CreateMap<Settings, ElementsToReturnDto>();
}
}
Run Code Online (Sandbox Code Playgroud)
控制器
public class ValuesController : ControllerBase
{
private readonly SeeMiddleContext _context;
private readonly IMapper _mapper;
public ValuesController(SeeMiddleContext context, IMapper mapper)
{
_context = context;
_mapper = mapper;
}
public IActionResult GetSettings()
{
List <IGrouping<string, Settings>> settingsFromDB = _context.Settings.GroupBy(s=>s.Property).ToList();
var settingsToReturn = _mapper.Map<List<IGrouping<string, Settings>>,List<SettingsToReturnDto>>(settingsFromDB);
return new JsonResult(settingsToReturn);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
863 次 |
| 最近记录: |