所以这在这里被问了一千遍了,但是到目前为止,没有任何帮助。
问题:
我有一个从控制器接收数据的类,将该数据传输到API并获得结果。 到目前为止,一切正常。
但是现在我被困住了,因为我必须要做类似的事情
控制器-> ARequestClass-> BRequestClass-> CientClass接收数据-> ClientClass响应数据-> BResultClass-> AResultClass->控制器
Controller和ARequestClass之间的连接有效。 BRequestClass和ClienClasst之间的连接有效
但是我该怎么说来自ArequestClass的女巫财产属于BRequestClass
我尝试了AutoMapper并观看和读取了DTO素材的音调,但是它们都帮不了我:|
看起来像这样
public class ARequest
{
public string AText { get; set; }
public string AProductKey { get; set; }
public string ASettings { get; set; }
}
public class BRequest
{
public string BText { get; set; }
public string BProductKey { get; set; }
public string BSettings { get; set; }
}
public class ClientClass
{
public BResult DoSomething(BRequest request)
{
client.something = $"www.anRandomApi.com/{request.BText}{request.BProductKey}{request.BSettings};
return client;
}
}
我知道这是一个简单的问题,解决方案应该很简单,但我脑子屁,需要一些帮助
答案 0 :(得分:1)
我认为,最好避免手动指定属性之间的映射。我不确定在您的案例中是否有充分的理由说明为什么它们分别是int arr1[5] = {11,2,33,45,5};
int arr2[3] = {16,73,80};
int final_arr[8];
memcpy(final_arr, arr1, 5 * sizeof(int));
memcpy(&final_arr[5], arr2, 3 * sizeof(int));
for(int i=0; i<(sizeof(final_arr)/sizeof(final_arr[0]));i++){
printf("final_arr: %i\n", final_arr[i]);
}
和name = request.POST.get('name')
description = request.POST.get('description')
category_id = request.POST.get('category')
category = Category.objects.get(id=category_id)
category = Category(
name = name,
name = description,
parent = category
)
category.save()
而不是两者都是AProductKey
(AutoMapper会自动为您处理)。 如果问题与序列化有关,则您的类中一种更好的方法可能是使用BProductKey
属性将JSON对象映射到C#中更易于维护的属性。
无论如何,您可以使用AutoMapper(推荐方式)为特定属性指定映射:
ProductKey
或者,如果您希望使用更危险的选项来节省对每个属性的单独映射(我会在生产代码中避免这种情况):
JsonProperty
或者,您可以在没有AutoMapper的情况下执行此操作,方法是将一个构造函数添加到采用ARequest的BRequest中:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<ARequest, BRequest>()
.ForMember(dest => dest.BText, o => o.MapFrom(src => src.AText))
.ForMember(d => d.BProductKey, o => o.MapFrom(s => s.AProductKey))
.ForMember(d => d.BSettings, o => o.MapFrom(s => s.ASettings));
});