【问题标题】:Mapping problem for Json Object/Array in .Net 6 AutoFacMapper - the node already has a parent.Net 6 AutoFacMapper 中 Json 对象/数组的映射问题 - 节点已经有父节点
【发布时间】:2022-08-10 19:21:23
【问题描述】:

我在 .Net 6 中使用 autofac 进行映射。 我正在尝试将我的 ModelView 类映射到 View。 但是,我在 JsonArray 属性中收到以下错误; \"节点已经有一个父 system.text.json\"

我的第一堂课;

 public class OpticTemplateAddViewModel
{
    
    [DisplayName(\"Şablon Adı\")]
    public string Name { get; set; }
    [DisplayName(\"Optik Şablonu\")]
    // public JsonArray Template { get; set; }        
    public string Template { get; set; }
    [DisplayName(\"Not Alanı\")]
    public string Note { get; set; }

    [DisplayName(\"Aktif Mi?\")]
    [Required(ErrorMessage = \"{0} alanı boş geçilmemelidir.\")]
    public bool IsActive { get; set; }

}

我的二等

 public class OpticTemplateAddDto
{
    [DisplayName(\"Optik Şablonu Adı\")]
    [Required(ErrorMessage = \"{0} boş geçilmemelidir.\")]
    [MaxLength(70, ErrorMessage = \"{0} {1} karakterden büyük olmamalıdır.\")]
    [MinLength(3, ErrorMessage = \"{0} {1} karakterden az olmamalıdır.\")]
            public string Name { get; set; }        
    [DisplayName(\"Optik Şablonu\")]
    public JsonArray Template { get; set; }
    // public string Template { get; set; }

    [DisplayName(\"Optik Şablonu Özel Not Alanı\")]
    [MaxLength(500, ErrorMessage = \"{0} {1} karakterden büyük olmamalıdır.\")]
    [MinLength(3, ErrorMessage = \"{0} {1} karakterden az olmamalıdır.\")]
    public string Note { get; set; }
    [DisplayName(\"Aktif Mi?\")]
    [Required(ErrorMessage = \"{0} boş geçilmemelidir.\")]
    public bool IsActive { get; set; }
}

我的映射配置文件;

 CreateMap<OpticTemplateAddViewModel, OpticTemplateAddDto>();

我在控制器中遇到错误的代码;

var opticTemplateAddDto = Mapper.Map<OpticTemplateAddDto>(opticTemplateAddViewModel);

    标签: entity-framework autofac .net-6.0


    【解决方案1】:

    我做了一个临时解决方案; 从映射中排除 JsonArray 中的字段,如下所示。

    CreateMap<OpticTemplateAddViewModel, OpticTemplateAddDto>().ForMember(x => x.Template, opt => opt.Ignore());
    

    然后我自己手动映射它;

    var opticTemplateAddDto = Mapper.Map<OpticTemplateAddDto>(opticTemplateAddViewModel);
    var source=opticTemplateAddViewModel.Template;
    opticTemplateAddDto.Template = JsonNode.Parse(source)!.AsArray();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 1970-01-01
      相关资源
      最近更新 更多