自动映射器。从 json 映射 属性

Automaper. Map property from json

我有一个响应模型。在模型中,我需要从 JSON 文件加载查询。例如,我从常量加载 json 数据。在实体(Problem)中不需要属性Queries,所以不存在

这是型号:

public class ProblemModel
{
    public int Id { get; set; }
    public bool IsResolved { get; set; }
    public ICollection<QueryModel> Queries{ get; set; }
    public int State {get; set; }
}
    

这是QueryModel:

public class QueryModel
{
    public string Query { get; set; }
    public QueryModel[] Accept { get; set; }
    public QueryModel[] No { get; set; }
}

这是 Automapper 配置文件

public class ProblemMappingProfile : Profile
{
    public ProblemMappingProfile()
    {
        const string jsonData = @"[
          {
             'Query': 'Query1',
             'Accept': [
                {
                    'Query': 'Query1_1',
                    'Accept': [
                       { }
                    ],
                    'Reject': [
                        { }
             ]
           }
        ],
        'Reject': [
            {
                'Query': 'Query1_2',
                'Accept': [
                    { }
                ],
                'Reject': [
                    { }
                ]
            }
        ]
    }
    ]";
            QueryModel[] json = JsonSerializer.Deserialize<QueryModel[]>(jsonData.Replace('\'', '\"'));

        CreateMap<Problem, ProblemModel>()
                .ForMember(d => d.Queries, o => o.MapFrom(s => json))
                .ReverseMap()
    }
}

每次 ProblemModel 映射时我都需要加载查询。例如:

return _mapper.Map<ProblemModel>(await _context.Problems.Where(x => x.Id == id).FirstOrDefaultAsync());

return _mapper.Map<ProblemModel>(await _context.Problems.Where(x => x.state == 2).ToListAsync());

我试图在自动映射器配置文件中映射 Queries,但这是错误的。因为配置文件构造函数只工作一次。构建自动映射配置文件后出现错误

An unhandled exception has occurred while executing the request.

System.ArgumentException: Field 'SimplyQuery.Services.Models.ProblemMappingProfile+<>c__DisplayClass0_0.json' is not defined for type 'SimplyQuery.Data.Entities.Problem'

所以我看不懂:

  1. 我需要在哪里映射 json 数据以将其动态包含到结果模型中?我该怎么做?

  2. 为什么我在构造函数中出错? JSON 数据反序列化很好,所以数组必须分配给另一个数组,不是吗?

抱歉,如果我的 post 理解不清楚。我已经解决了我的问题。我更改了我的自动映射器配置文件:

public class ProblemMappingProfile : Profile
    {
        private string jsonData = @"[
            {
                'Query': 'Query1',
                'Accept': [
                    {
                        'Query': 'Query1_1',
                        'Accept': [
                            { }
                        ],
                        'Reject': [
                            { }
                        ]
                    }
                ],
                'Reject': [
                    {
                        'Query': 'Query1_2',
                        'Accept': [
                            { }
                        ],
                        'Reject': [
                            { }
                        ]
                    }
                ]
            }
        ]";
        
        private QueryModel[] queries;
        
        public ProblemMappingProfile()
        {
            CreateMap<Problem, ProblemModel>()
                .BeforeMap((src, dest) => GetQuestions(@"Models\LandParcelModels\StateLandCadQuestions.json"))
                .ForMember(d => d.Queries, o => o.MapFrom(s => queries.ToList()))
                .ReverseMap()
        }
        
        private void GetQuestions(string questionsFilePath)
        {
            // here will be loading data into jsonData from file 
            queries = JsonSerializer.Deserialize<QueryModel[]>(jsonData.Replace('\'', '\"'));
        }
        
    }