如果在基础目标类型中尚未初始化属性,我如何使用Automapper创建Map?
示例:
public class UserAccount
{
public string name { get; set; }
public Dictionary<string,string> properties { get; set; }
}
public class UserAccountOtherType
{
public string name { get; set; }
public string Property1 {get;set; }
}
public static UserAccount CustomMap(UserAccountOtherType type2)
{
AutoMapper.Mapper.CreateMap<UserAccount,UserAccountOtherType>()
.ForMember(dest => dest.properties["Property1", opt => opt.MapFrom(src => (string)src.Property1));
return AutoMapper.Mapper.Map<UserAccount,UserAccountOtherType>(type2);
}
当我尝试执行此代码时,它会失败,因为UserAccount中的Dictionary尚未初始化。我无法自己初始化Object,因为UserAccount类是WCF Service接口的Datacontract。 我必须自己创建一个Dicationary并将其分配给该物业。
UserAccount b = new UserAccount();
Dictionary<string,string> properties = new Dictionary<string,string>();
b.properties = properties;
如何使用Automapper解决这个问题?或者我的方法没有意义?
答案 0 :(得分:0)
我只能想到做这样的事情就是编写一个实现AutoMapper.IValueResolver
的类。然后opt.MapFrom...
变为opt.ResolveUsing....FromMember...
可能此时您的目的地是整个字典(我想如果您遗漏FromMember
,您将整个对象放入您的解析器
在IValueResolver.Resolve
的实施中,尝试进入调试器并查看ResolutionContext
中的source.Context
,然后在构建完字典后,返回source.New(myDictionary)