Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在复杂类型中使用automapper_C#_Automapper - Fatal编程技术网

C# 如何在复杂类型中使用automapper

C# 如何在复杂类型中使用automapper,c#,automapper,C#,Automapper,在视图的域模型中,我有以下对象作为属性的支持字段 public class ModelProperty<T>// where t:struct { public T Value { get; set; } public string Description { get; set; } public string LabelName { get; set; } } 是否可以将值从源映射到目标。使用Automapper,我有以下映射设置 //note Src

在视图的域模型中,我有以下对象作为属性的支持字段

public class ModelProperty<T>// where t:struct
{
    public T Value { get; set; }
    public string Description { get;  set; }
    public string LabelName { get;  set; }
}
是否可以将值从源映射到目标。使用Automapper,我有以下映射设置

//note SrcObj is not an object but a namespace alias since the domain and business objects are of the same name
Mapper.CreateMap<SrcObj.Incident, Incident>()
                .ForMember(ui => ui.TypeText.Value,
                           opt => opt.MapFrom(src => src.TypeText));
但我得到的异常表达式必须解析为顶级成员,而不是任何子对象的属性。在子类型或AfterMap选项上使用自定义解析器

我是automapper的新手,但在查看文档时,我正在处理的对象是否太复杂了,因为这里实际上有三种类型,而不是两种

如果可以处理这种类型的映射,那么如何处理

更新

根据Jimmy的建议,我已将代码更新如下:

Mapper.CreateMap<SrcObj.Incident, Incident>();
Mapper.CreateMap<string, ModelProperty<string>>()
                .ConvertUsing(src => new ModelProperty<string> { Value = src });

Mapper.AssertConfigurationIsValid();     
SrcObj.Incident viewModelDto = md.GenerateMockIncident(); //populate the business object with mock data    
uibase = Mapper.Map<SrcObj.Incident, Incident>(viewModelDto);
代码执行,我没有得到任何异常,但是在业务对象中设置和返回的值仍然没有被分配给支持属性值,它仍然为null

我错过了什么


-干杯试试这个。。您需要提供到目标TypeText的ModelProperty对象映射

Mapper.CreateMap<Funky.Incident, Incident>()
       .ForMember(ui => ui.TypeText,
                  opt => opt.MapFrom(src => 
                         new ModelProperty<string> 
                         { 
                          Value = src.TypeText 
                         }));
对TypeCode属性映射执行相同的操作,以便映射所有字段

只有当每个成员的名称不同或类型名称不同时,才需要考虑每个成员映射。在这种情况下,在您给出提示之前,AutoMapper将很难将字符串转换为模型对象


请尝试映射类型代码。。我不知道ObjectBase等的属性,所以您需要检查那里是否也需要手动映射。

试试这个。。您需要提供到目标TypeText的ModelProperty对象映射

Mapper.CreateMap<Funky.Incident, Incident>()
       .ForMember(ui => ui.TypeText,
                  opt => opt.MapFrom(src => 
                         new ModelProperty<string> 
                         { 
                          Value = src.TypeText 
                         }));
对TypeCode属性映射执行相同的操作,以便映射所有字段

只有当每个成员的名称不同或类型名称不同时,才需要考虑每个成员映射。在这种情况下,在您给出提示之前,AutoMapper将很难将字符串转换为模型对象


请尝试映射类型代码。。我不知道ObjectBase等的属性。因此,您需要检查那里是否也需要手动映射。

更简单的方法是创建类型转换器:

Mapper.CreateMap<string, ModelProperty<string>>()
    .ConvertUsing(src => new ModelProperty<string> { Value = src });

然后,每当AutoMapper看到string->ModelProperty时,您都会看到这个。您根本不必进行特定于成员的配置。

更简单的方法是创建类型转换器:

Mapper.CreateMap<string, ModelProperty<string>>()
    .ConvertUsing(src => new ModelProperty<string> { Value = src });

然后,每当AutoMapper看到string->ModelProperty时,您都会看到这个。您根本不必进行特定于成员的配置。

这纠正了最初的异常,但我仍然没有看到映射到新对象的数据。看起来还有另一个问题。上面的映射从何而来?AutoMapper.AssertConfiguration验证就是这样,我看到了一个异常,现在它通知我找到了其他未映射的成员。我没有意识到我需要考虑每个成员,我假设每个定义的映射都将适用,如果发现其他成员,它们将被忽略。我是否可以假设,如果找到其他映射,它将不会映射对象?您需要考虑每个成员,仅当它们的名称不同或类型名称不同时。在这种情况下,在您给出提示之前,AutoMapper将很难将字符串转换为模型对象。您是否也尝试映射类型代码。。我不知道ObjectBase等的属性纠正了最初的异常,但我仍然没有看到映射到新对象的数据。看起来还有另一个问题。上面的映射从何而来?AutoMapper.AssertConfiguration验证就是这样,我看到了一个异常,现在它通知我找到了其他未映射的成员。我没有意识到我需要考虑每个成员,我假设每个定义的映射都将适用,如果发现其他成员,它们将被忽略。我是否可以假设,如果找到其他映射,它将不会映射对象?您需要考虑每个成员,仅当它们的名称不同或类型名称不同时。在这种情况下,在您给出提示之前,AutoMapper将很难将字符串转换为模型对象。您是否也尝试映射类型代码。。我不知道ObjectBase等的属性。我已经更新了我的问题。我尝试了类型转换器,该方法毫无例外地执行,但是没有从业务对象模型中的值为域中的模型分配任何值。关于如何解决此问题或确定其不分配原因的任何建议?我已更新了我的问题。我尝试了类型转换器,该方法毫无例外地执行,但是没有从业务对象模型中的值为域中的模型分配任何值。关于如何对此进行故障排除或确定其未分配的原因有何建议?我终于发现了未分配值的问题所在。我正在创建的属性是w
我在域模型中只定义了get和return,但没有setter。我在属性中添加了一个私有setter,现在正在应用映射。我最终发现了没有赋值的问题所在。我在域模型中创建的属性只定义了get和return,而没有setter。我在属性中添加了一个私有setter,现在正在应用映射