考慮以下類:
public class Colli
{
public int Count { get; set; }
public string Description { get; set; }
}
public class Shipment
{
public List<Colli> Collis { get; set; }
}
public class ShipmentDto
{
public List<ColliDto> Collis { get; set; }
}
public class ColliDto
{
public string Description { get; set; }
}
我希望Collis 的串列生成一個新的ColliDtos 串列,所有這些都具有基于Counta的相同描述Colli。
JSON 格式的預期輸入/輸出示例:
{
"collis": [
{
"count": 2,
"description": "Colli 1"
},
{
"count": 1,
"description": "Colli 2"
}
]
}
{
"collis": [
{
"description": "Colli 1"
},
{
"description": "Colli 1"
},
{
"description": "Colli 2"
}
]
}
(真正的類有更多的領域——這只是一個最小的作業示例)
我的研究表明應該可以使用 來解決它ITypeConverter,我嘗試創建以下內容:
public class ColliConverter : ITypeConverter<Colli, List<ColliDto>>
{
public List<ColliDto> Convert(Colli source, List<ColliDto> destination, ResolutionContext context)
{
var retval = new List<ColliDto>();
for (int i = 0; i < source.Count; i )
{
retval.Add(context.Mapper.Map<ColliDto>(source));
}
return retval;
}
}
使用以下映射組態檔:
CreateMap<Colli, List<ColliDto>>().ConvertUsing<ColliConverter>();
但是,在轉換器類中設定斷點告訴我它沒有被使用。
這可以用 AutoMapper 來完成,還是我應該走“老路”并手動映射這個類?
uj5u.com熱心網友回復:
解決方案 1
- 創建用于從物件
ShipmentConverter映射到物件的型別轉換器。ShipmentShipmentDto
public class ShipmentConverter : ITypeConverter<Shipment, ShipmentDto>
{
public ShipmentDto Convert(Shipment source, ShipmentDto destination, ResolutionContext context)
{
destination = new ShipmentDto();
destination.Collis = new List<ColliDto>();
foreach (var colli in source.Collis)
{
for (int i = 0; i < colli.Count; i )
{
destination.Collis.Add(context.Mapper.Map<ColliDto>(colli));
}
}
return destination;
}
}
- 的映射組態檔
Shipment。
CreateMap<Colli, ColliDto>();
CreateMap<Shipment, ShipmentDto>()
.ConvertUsing<ShipmentConverter>();
演示解決方案 1 @ .NET Fiddle
方案二
- 創建用于從串列
ColliListConverter映射到串列的型別轉換器。ColliColliDto
public class ColliListConverter : ITypeConverter<List<Colli>, List<ColliDto>>
{
public List<ColliDto> Convert(List<Colli> source, List<ColliDto> destination, ResolutionContext context)
{
var retval = new List<ColliDto>();
foreach (var colli in source)
{
for (int i = 0; i < colli.Count; i )
{
retval.Add(context.Mapper.Map<ColliDto>(colli));
}
}
return retval;
}
}
- 的映射組態檔
Shipment。
cfg.CreateMap<Colli, ColliDto>();
cfg.CreateMap<List<Colli>, List<ColliDto>>()
.ConvertUsing<ColliListConverter>();
cfg.CreateMap<Shipment, ShipmentDto>();
演示解決方案 2 @ .NET Fiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/535012.html
標籤:C#。网自动映射器
