Профиль, наследующий автомапер, возвращает дополнительные свойства в json - PullRequest
0 голосов
/ 08 ноября 2018

Из того, что я прочитал, стандарт заключается в наследовании класса Profile, чтобы Automapper обнаруживал карты. https://automapper.org/

public class GamerVM : Profile
{
    public GamerVM()
    {
        CreateMap<GamerVM, Gamer>();
        CreateMap<Gamer, GamerVM>();
    }
    public int Id { get; set; }
    public string Name { get; set; }
    public string Tag { get; set; }
}

Если я наследую этот класс в моей модели представления, Json возвращается с дополнительными свойствами:

 {
    "id": 8,
    "name": "Ashton Heir",
    "tag": "Legend",
    "defaultMemberConfig": {
        "nameMapper": {
            "getMembers": {},
            "namedMappers": [
                {
                    "methodCaseSensitive": false
                },
                {},
                {
                    "prefixes": [
                        "Get"
                    ],
                    "postfixes": [],
                    "destinationPrefixes": [],
                    "destinationPostfixes": []
                }
            ]
        },
        "memberMappers": [
            {
                "nameMapper": {
                    "getMembers": {},
                    "namedMappers": [
                        {
                            "methodCaseSensitive": false
                        },
                        {},
                        {
                            "prefixes": [
                                "Get"
                            ],
                            "postfixes": [],
                            "destinationPrefixes": [],
                            "destinationPostfixes": []
                        }
                    ]
                }
            },
            {
                "sourceMemberNamingConvention": {
                    "splittingExpression": {
                        "pattern": "(\\p{Lu}+(?=$|\\p{Lu}[\\p{Ll}0-9])|\\p{Lu}?[\\p{Ll}0-9]+)",
                        "options": 0
                    },
                    "separatorCharacter": ""
                },
                "destinationMemberNamingConvention": {
                    "splittingExpression": {
                        "pattern": "(\\p{Lu}+(?=$|\\p{Lu}[\\p{Ll}0-9])|\\p{Lu}?[\\p{Ll}0-9]+)",
                        "options": 0
                    },
                    "separatorCharacter": ""
                }
            }
        ]
    }

Я правильно это делаю? Есть ли способ, чтобы JSON игнорировал эти дополнительные свойства?

1 Ответ

0 голосов
/ 08 ноября 2018

Ваша модель не должна наследовать профиль. Вы создаете подкласс Profile для настройки сопоставлений модель-модель.

public class GamerMappingProfile : Profile
{
    public GamerMappingProfile()
    {
        CreateMap<Gamer, GamerVM>();
        CreateMap<GamerVM, Gamer>();
    }
}

Затем вы загружаете профили при создании экземпляра mapper.

var config = new MapperConfiguration(cfg => {
    cfg.AddProfile<GamerMappingProfile>();
    cfg.AddProfile<MyOtherProfile>();
});

var mapper = config.CreateMapper();

Теперь ваша модель чиста - она ​​содержит только ваши свойства, а для сериализации не требуется дополнительный пользовательский код.

Для автоматического сканирования вашего профиля

http://docs.automapper.org/en/stable/Configuration.html#assembly-scanning-for-auto-configuration

Скопировано по ссылке выше

// Scan for all profiles in an assembly
// ... using instance approach:
var config = new MapperConfiguration(cfg => {
    cfg.AddProfiles(myAssembly);
});
// ... or static approach:
Mapper.Initialize(cfg => cfg.AddProfiles(myAssembly));

// Can also use assembly names:
Mapper.Initialize(cfg =>
    cfg.AddProfiles(new [] {
        "Foo.UI",
        "Foo.Core"
    });
);

// Or marker types for assemblies:
Mapper.Initialize(cfg =>
    cfg.AddProfiles(new [] {
        typeof(HomeController),
        typeof(Entity)
    });
);
...