У меня есть объект с переводимым свойством Name
и словарь для хранения, который переводится как JSON.
public class Entity
{
public string Id { get; set; }
public string Name { get; set; }
//key is culture's name
public IDictionary<string, Translation> Translations { get; set; }
}
public class Translation
{
public string Name { get; set; }
public string Culture { get; set; }
}
public class EntityDTO
{
public string Id { get; set; }
public string Name { get; set; }
}
Как настроить AutoMapper для сопоставления свойства Name
из словаря переводов, если таковой существует?
public static class AutoMapExtensions
{
public static IMappingExpression<TTranslatableEntity, TDestination>
CreateTranslatableMap<TTranslatableEntity, TTranslation, TDestination>(
this IMapperConfigurationExpression configuration, MultiLingualMapContext multiLingualMapContext)
where TTranslation : class, ITranslation
where TTranslatableEntity : ITranslatable<TTranslation>
{
return configuration.CreateMap<TTranslatableEntity, TDestination>().AfterMap(
(source, destination, context) =>
{
if (source.Translations == null)
{
return;
}
if (source.Translations.TryGetValue(CultureInfo.CurrentUICulture.Name,
out TTranslation translation))
{
if (translation != null)
{
context.Mapper.Map(translation, destination);
return;
}
}
var defaultLanguage = multiLingualMapContext.SettingManager
.GetSettingValue(LocalizationSettingNames.DefaultLanguage);
if (source.Translations.TryGetValue(defaultLanguage, out translation))
{
if (translation != null)
{
context.Mapper.Map(translation, destination);
return;
}
}
translation = source.Translations.FirstOrDefault().Value;
if (translation != null)
{
context.Mapper.Map(translation, destination);
}
}
);
}
}
При попытке запустить тест моя VS была повреждена и исправлена только при перезагрузке компьютера,С комментированием этот раздел кода тест тоже проходил.