自动映射:将JSON转换为对象列表

源对象(JSON,如果重要的话,使用JSON.NET):

{ "conum" : 1001, "name" : "CLN Industries Corporation", "agencyName" : "Murphy, Holmes & Associates, LLC", "sAA" : [{ "code" : 247, "description" : "Mechanic\u0027s lien - Bond to Discharge - Fixed penalty - where principal has posted Performance and Pa" }, { "code" : 277, "description" : "Mechanic\u0027s lien - Bond to Discharge - Open Penalty - where principal has posted Performance and Paym" }, { "code" : 505, "description" : "Indemnity Bonds - Contractor\u0027s Indemnity Against Damages where there is a performance bond and addit" } ] } 

目标对象(C#):

 public class CorporateRatesInfo { public string Conum { get; set; } public string Name { get; set; } public string AgencyName { get; set; } public List SaaCodes { get; set; } } public class SaaCode { public string Code { get; set; } public string Description { get; set; } } 

自动配置和映射:

 var config = new MapperConfiguration(cfg => { cfg.CreateMap(); cfg.AddProfile(); }); //config.AssertConfigurationIsValid(); _mapper = config.CreateMapper(); public class CorporateRatesProfile : Profile { protected override void Configure() { CreateMap() .ForMember("SaaCodes", cfg => { cfg.MapFrom(jo => jo["sAA"]); }) .ForMember("Conum", cfg => { cfg.MapFrom(jo => jo["conum"]); }) .ForMember("Name", cfg => { cfg.MapFrom(jo => jo["name"]); }) .ForMember("AgencyName", cfg => { cfg.MapFrom(jo => jo["agencyName"]); }); } } 

除了SaaCodes转换之外,一切都有效,其中Automapper将每个条目转换为空的SaaCode对象(所有属性都设置为null)。

如何/在何处告诉automapper如何将该JSON字段中的项目转换为其目标类型?

试试这个 –

 public class CorporateRatesInfo { public string Conum { get; set; } public string Name { get; set; } public string AgencyName { get; set; } public List SaaCodes { get; set; } } public class SaaCode { public string Code { get; set; } public string Description { get; set; } } public class CorporateRatesProfile : Profile { protected override void Configure() { CreateMap() .ForMember("Code", cfg => { cfg.MapFrom(jo => jo["code"]); }) .ForMember("Description", cfg => { cfg.MapFrom(jo => jo["description"]); }); CreateMap() .ForMember("SaaCodes", cfg => { cfg.MapFrom(jo => jo["sAA"]); }) .ForMember("Conum", cfg => { cfg.MapFrom(jo => jo["conum"]); }) .ForMember("Name", cfg => { cfg.MapFrom(jo => jo["name"]); }) .ForMember("AgencyName", cfg => { cfg.MapFrom(jo => jo["agencyName"]); }); } } class Program { static void Main(string[] args) { var config = new MapperConfiguration(cfg => { cfg.CreateMap(); cfg.AddProfile(); }); //config.AssertConfigurationIsValid(); var mapper = config.CreateMapper(); var jsonText = @" { ""conum"" : 1001, ""name"" : ""CLN Industries Corporation"", ""agencyName"" : ""Murphy, Holmes & Associates, LLC"", ""sAA"" : [{ ""code"" : 247, ""description"" : ""Mechanic\u0027s lien - Bond to Discharge - Fixed penalty - where principal has posted Performance and Pa"" }, { ""code"" : 277, ""description"" : ""Mechanic\u0027s lien - Bond to Discharge - Open Penalty - where principal has posted Performance and Paym"" }, { ""code"" : 505, ""description"" : ""Indemnity Bonds - Contractor\u0027s Indemnity Against Damages where there is a performance bond and addit"" } ] } "; var jsonoObj = JObject.Parse(jsonText); CorporateRatesInfo dto = mapper.Map(jsonoObj); } }