![](/img/trans.png)
[英]Result of mapper is NULL? How do I map my api request to a dto?
[英]How do i map my model and dto using this particular mapper?
我正在嘗試映射 api 調用的響應。 我所做的是將 API 調用的響應(響應是一個數組)反序列化為一個模型,然后使用 rootobject 的數據返回一個新的 dto。
public class RoadStatusService : IRoadStatusService
{
string baseURL = "blah";
private readonly IMapToNew<Road, RoadDto> _mapper;
public RoadStatusService()
{
}
public RoadStatusService(IMapToNew<Road, RoadDto> mapper)
{
_mapper = mapper;
}
public RoadDto GetRoadStatusDetail()
{
var road = CallApi();
return new RoadDto
{
DisplayName = road.Result.DisplayName,
StatusSeverityDescription = road.Result.DisplayName,
StatusSeverity = road.Result.DisplayName
};
}
private async Task<Road> CallApi()
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(baseURL);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage Res = await client.GetAsync(baseURL);
if (Res.IsSuccessStatusCode)
{
var roadResponse = Res.Content.ReadAsStringAsync().Result;
List<Road> road = JsonConvert.DeserializeObject<List<Road>>(roadResponse);
foreach (var item in road)
{
return new Road
{
DisplayName = item.DisplayName,
StatusSeverity = item.StatusSeverity,
StatusSeverityDescription = item.StatusSeverityDescription
};
}
}
return null;
}
}
我的問題是,如何使用映射器類將我的模型映射到我的 dto 對象而不必這樣做:
public RoadDto GetRoadStatusDetail()
{
var road = CallApi();
return new RoadDto
{
DisplayName = road.Result.DisplayName,
StatusSeverityDescription = road.Result.DisplayName,
StatusSeverity = road.Result.DisplayName
};
}
我已經編寫了一個映射器類和一個接口來執行此操作,但我無法讓它工作:
public class RoadToRoadDtoMapper : IMapToNew<Road, RoadDto>
{
public RoadDto Map(Road model)
{
return new RoadDto
{
DisplayName = model?.DisplayName,
StatusSeverity = model?.StatusSeverity,
StatusSeverityDescription = model?.StatusSeverityDescription
};
}
}
和:
public interface IMapToNew<in TIn, out TOut>
{
TOut Map(TIn model);
}
我認為我遇到的問題是 api 調用以數組響應? 我想知道我是否應該以某種方式將我的對象轉換為列表,然后調用.Select
並使用我編寫的 mapper.map 函數。 我無法讓它工作。
如果我理解你想要做什么,你也需要一個列表的映射器,然后為該類中的對象調用映射器:
public class RoadListToRoadListDtoMapper : IMapToNew<List<Road>, List<RoadDto>>
{
private RoadToRoadDtoMapper roadToRoadDtoMapper = new RoadToRoadDtoMapper();
public List<RoadDto> Map(List<Road> models)
{
var roadDtos = new List<RoadDto>();
foreach(var road in models){
roadDtos.Add(roadToRoadDtoMapper.Map(road));
}
return roadDtos;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.