两类之间的DTO

时间:2018-10-26 08:36:40

标签: c# automapper dto

所以这在这里被问了一千遍了,但是到目前为止,没有任何帮助。

问题:

我有一个从控制器接收数据的类,将该数据传输到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;
    }
}

我知道这是一个简单的问题,解决方案应该很简单,但我脑子屁,需要一些帮助

1 个答案:

答案 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));
});