Le code ci-dessous est juste pour cette question
Je vais avoir un cours comme
public User class { public ssortingng Name{get;set;} public ssortingng Age{get;set; }
Je vais avoir un dictionnaire comme
Dictionary data= new Dictionary(); data.Add("Name","Rusi"); data.Add("Age","23"); User user= new User();
Maintenant, je veux mapper User
object User
à ce dictionary
utilisant Automapper
. Automapper mappe les propriétés des objects mais dans mon cas, il y a un dictionnaire et un object.
Alors, s’il vous plaît me suggérer comment puis-je faire cela
AutoMapper mappe entre les propriétés des objects et n’est pas censé fonctionner dans de tels scénarios. Dans ce cas, vous avez besoin de la magie de reflection. Vous pouvez sortingcher par une sérialisation intermédiaire:
var data = new Dictionary(); data.Add("Name", "Rusi"); data.Add("Age", "23"); var serializer = new JavaScriptSerializer(); var user = serializer.Deserialize(serializer.Serialize(data));
Et si vous insistez pour utiliser AutoMapper, vous pouvez par exemple faire quelque chose dans le sens suivant:
Mapper .CreateMap, User>() .ConvertUsing(x => { var serializer = new JavaScriptSerializer(); return serializer.Deserialize(serializer.Serialize(x)); });
et alors:
var data = new Dictionary(); data.Add("Name", "Rusi"); data.Add("Age", "23"); var user = Mapper.Map, User>(data);
Si vous devez gérer des hiérarchies d’objects plus complexes avec des sous-objects, vous devez vous poser la question suivante: Dictionary
la structure de données appropriée à utiliser dans ce cas?
AutoMapper est une solution assez flexible. Vous pouvez probablement y parvenir en utilisant un profil de mappage personnalisé, par exemple:
public class UserMappingProfile : Profile { // Props public override ssortingng ProfileName { get { return "UserMappingProfile"; } } // Methods public override void Configure() { CreateMap>().ConvertUsing(); base.Configure(); } // Types internal class DictionaryTypeConverter : ITypeConverter> { public User Convert(ResolutionContext context) { var dict = context.SourceValue as Dictionary; if (dict == null) return null; return new User() { Name = dict["Name"], Age = dict["Age"] }; } } }
Avec cela, je peux créer une instance personnalisée d’un mappeur:
var config = new Configuration(new TypeMapFactory(), MapperRegistry.AllMappers()); config.AddProfile(); config.AssertConfigurationIsValid(); var mapper = new MappingEngine(config);
Ce que je pourrais probablement faire:
var dict = new Dictionary { { "Name", "Matt" }, { "Age", "27" } }; var user = mapper.Map>(dict);
Comme je viens de tomber par hasard sur cette question, j’aimerais append cette réponse possible avec la version actuelle d’AutoMapper (même si la question d’origine est déjà très ancienne):
public class MyConfig { public ssortingng Foo { get; set; } public int Bar { get; set; } } var config = new MapperConfiguration(cfg => {}); var mapper = config.CreateMapper(); var source = new Dictionary { ["Foo"] = "Hello", ["Bar"] = 123 }; var obj = mapper.Map(source); obj.Foo == "Hello"; // true
Solution beaucoup plus simple. Mappez simplement votre object à partir de KeyValuePair. Exemple:
CreateMap, User>() .ForMember(u => u.Id, src => src.MapFrom(x => x.Key)) .ForMember(u => u.Name, src => src.MapFrom(x => x.Value));