Contexte:AutoMapper: Ignorer élément de dictionnaire spécifique (s) au cours de la cartographie
Il 2 classes principales qui ont l'air quelque chose comme ceci:
public class Source
{
public Dictionary<AttributeType, object> Attributes { get; set; }
}
public class Target
{
public string Title { get; set; }
public string Description { get; set; }
public List<Attribute> Attributes { get; set; }
}
Et sous/collection/types Enum:
public class Attribute
{
public string Name { get; set; }
public string Value { get; set; }
}
public enum AttributeType
{
Title,
Description,
SomethingElse,
Foobar
}
Actuellement ma carte ressemble à ceci:
CreateMap<Source, Target>()
.ForMember(dest => dest.Description, opt => opt.MapAttribute(AttributeType.Description))
.ForMember(dest => dest.Title, opt => opt.MapAttribute(AttributeType.Title));
Où MapAttribute
obtient l'élément de la Dictionary
et en utilisant le AttributeType
j'ai fourni, ajoute à la collection cible comme un objet (en utilisant un essai obtenir et retourner un vide si la clé (nom valeur &) n'existe pas) ...
Après tout cela ma fin objectif fixé par ressembler à ceci:
{
title: "Foo",
attributes: [
{ name: "SomethingElse", value: "Bar" },
{ name: "Title", value: "Foo"}
]
}
question:
Comment faire pour mapper le reste des éléments à la classe cible, mais je dois pouvoir exclure des clés spécifiques (comme, titre ou description). PAR EXEMPLE. Les éléments Source.Attribute qui ont un emplacement défini dans la cible sont exclus de la collection Target.Attributes et les propriétés "left-over" continuent d'être affectées à Target.Attributes.
Pour encore plus de clarté (si ma source ressemble à ceci):
{ attributes: { title: "Foo", somethingelse: "Bar" } }
il la carte à une cible comme ceci:
{ title: "Foo", attributes: [{ name: "SomethingElse", value: "Bar" }] }
J'ai essayé, mais il ne compile pas, en indiquant ce qui suit:
Configuration personnalisée pour les membres est pris en charge uniquement pour les membres individuels de niveau supérieur sur un type.
CreateMap<KeyValuePair<AttributeType, object>, Attribute>()
.ForSourceMember(x => x.Key == AttributeType.CompanyName, y => y.Ignore())