Objet source (JSON, à l'aide de JSON.NET si cela compte):
var config = new MapperConfiguration(cfg => { cfg.CreateMap<JObject, CorporateRatesInfo>(); cfg.AddProfile<CorporateRatesProfile>(); }); //config.AssertConfigurationIsValid(); _mapper = config.CreateMapper(); public class CorporateRatesProfile : Profile { protected override void Configure() { CreateMap<JObject, CorporateRatesInfo>() .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"]); }); } }
3 Réponses :
Essayez ceci -
public class CorporateRatesInfo { public string Conum { get; set; } public string Name { get; set; } public string AgencyName { get; set; } public List<SaaCode> 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<JObject, SaaCode>() .ForMember("Code", cfg => { cfg.MapFrom(jo => jo["code"]); }) .ForMember("Description", cfg => { cfg.MapFrom(jo => jo["description"]); }); CreateMap<JObject, CorporateRatesInfo>() .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<JObject, CorporateRatesInfo>(); cfg.AddProfile<CorporateRatesProfile>(); }); //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<CorporateRatesInfo>(jsonoObj); } }
Fantastique! J'ai essayé de semblable, mais je pensais que le type source allait être une chaîne. :(
La mise en œuvre des corporatésProfile ne fonctionne que vers la version 4.x. Après 5.0, c'est obsolète et vous devez utiliser cette approche (et plus propre IMHO) automapper.readthedocs.io/fr/Latest/.../a>
Saacodes est vide, il ne correspond pas.
Malheureusement, j'ai suivi QUESTION DE BANDAMAMP dans les versions plus récentes de FADApper et a eu du mal à obtenir ce travail.
Mon alternative approche pour quiconque trouver ce problème a été trouvé sur le Source P>
} p> Exemple de profil de configuration du profil strong> p> tycleConverter strong> p>
Rapport, j'ai écrit une solution simple si les noms de champs correspondant, vous pouvez utiliser le désériorizer de Newtonsoft à l'intérieur de la méthode d'assistance de l'extension Maper. J'ai écrit une méthode d'extension générique Resoldjson.
CreateMap<JObject, CorporateRatesInfo>() .ForMember(x => x.SaaCodes,m => { m.MapFrom(s => s.ResolveJson<SaaCode>("sAA"));});
Vous devez également vous rendre dans la cartographe de Jobject à Saacode.