0

I am mapping with AutoMapper in .Net 6.

I'm trying to map my ModelView class to View. However, I am getting the following error in the JsonArray property; "the node already has a parent system.text.json"

My First Class;

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; }
}

My Second Class

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; }
}

My Mapping Profile;

 CreateMap<OpticTemplateAddViewModel, OpticTemplateAddDto>();

The code I got error in Controller;

var opticTemplateAddDto = Mapper.Map<OpticTemplateAddDto>(opticTemplateAddViewModel);
1
  • AutoMapper is not Autofac. AutoMapper does mapping; Autofac does dependency injection. I'll update the question/tags/title accordingly. Commented Aug 10, 2022 at 21:41

1 Answer 1

0

I made a temporary solution; Exclude field from JsonArray from mapping as below.

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

I then manually mapped it myself;

var opticTemplateAddDto = Mapper.Map<OpticTemplateAddDto>(opticTemplateAddViewModel);
var source=opticTemplateAddViewModel.Template;
opticTemplateAddDto.Template = JsonNode.Parse(source)!.AsArray();
Sign up to request clarification or add additional context in comments.

1 Comment

ForMember(x => x.Template, opt => opt.MapFrom(s => JsonNode.Parse(source)!.AsArray()))

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.