Проблема конфигурации пользовательской карты Automapper - PullRequest
0 голосов
/ 24 января 2020

У меня есть два класса, в каждом из которых есть член " Очки ", но в одном из них Очки имеют тип string и string [] [ ] в другом классе.

Я использую Automapper и следующую конфигурацию

x.CreateMap<ProblemViewModel, Problem>()
                    .ForMember(dest => dest.Points,
                        src => src.MapFrom{PointsForDbResolver}())
                    .ReverseMap()
                .ForMember(dest => dest.Points,
                    src => src.MapFrom{PointsForViewResolver}());

с определителями пользовательских значений «PointsForDbResolver» и «PointsForViewResolver» (оба являются IValueResolver), которые преобразуют указанные типы друг в друге. Но я получаю сообщение об ошибке:

Сведения об исключении: System.InvalidOperationException: последовательность не содержит элементов

Coud вы помогаете мне решить эту проблему, и возможно ли, чтобы это преобразование было сделано Automapper.

1 Ответ

0 голосов
/ 24 января 2020

Далее идет преобразователь из строки [] [] в строку

public class PointsToDbResolver : IValueResolver<ProblemViewModel, Problem, string>
{
    public string Resolve(
        ProblemViewModel source,
        Problem destination,
        string destMember, 
        ResolutionContext context)
    {
        if (source == null)
        {
            return null;
        }

        StringBuilder result = new StringBuilder();
        for (int row = 0; row < source.Points.GetLength(0); row++)
        {
            for (int col = 0; col < source.Points[row].Length; col++)
            {
                result.Append(source.Points[row][col]).Append(Constants.PointsColSeparator);
            }
            result.Replace(
                Constants.PointsColSeparator,
                Constants.PointsRowSeparator,
                result.Length - 1, 1);
        }
        result.Remove(result.Length - 1, 1);

        return result.ToString();
    }

и из строки в строку [] []

public class PointsToViewResolver : IValueResolver<Problem, ProblemViewModel, string[][]>
{
    public string[][] Resolve(
        Problem source,
        ProblemViewModel destination,
        string[][] destMember, 
        ResolutionContext context)
    {
        if (source.Points == null)
        {
            return new string[0][];
        }

        var rows = source.Points.Split(new string[] { Constants.PointsRowSeparator },
            StringSplitOptions.None);
        string[][] result = new string[rows.Length][];
        for (int row = 0; row < rows.Length; row++)
        {
            result[row] =
                rows[row].Split(new string[] { Constants.PointsColSeparator },
                StringSplitOptions.None);
        }

        return result;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...