[C# MapSter] 맵핑 객체 내부의 프로퍼티가 서로 다른 경우
- C#/C# 문법
- 2022. 5. 15. 18:10
목적
- C# MapSter 를 이용하여 맵핑을 하려고 할 때, 객체 내부의 프로퍼티가 서로 다른 경우가 있습니다.
- 하지만, 프로퍼티가 달라도 MapSter 에서는 맵핑 할 수 있는 방법이 있습니다.
- 예제 코드를 작성하여 어떻게 맵핑을 진행하는지 보여 드리도록 하겠습니다.
예제 코드
- 아래 예제에서는 Member 에서 Address 부분이 MemberDto 부분으로 Address1, Address2, Address3 로 나누어졌고, PhoneNumber 도 Tel로 변경이 되어있습니다.
public class Member
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Address { get; set; } // DTO 에서 데이터가 3개로 분리됨.
public string PhoneNumber { get; set; } // DTO에서 Tel로 변경됨.
}
public class MemberDto
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Address1 { get; set; } // Address 시 군
public string Address2 { get; set; } // Address 구
public string Address3 { get; set; } // Address 상세주소.
public string Tel { get; set; } // Member.PhoneNumber과 Mapping
}
- 위와 같이 프로퍼티 이름은 다르지만, 역할이 동일하다면 MapSter 에서는 다음과 같은 설정을 통하여 맵핑을 진행할 수 있습니다.
- TypeAdapterConfig<변환하기 전 객체 타입, 변환 할 객체 타입> 으로 명시적으로 선언하여 사용해야 합니다.
- 해당 코드는
Dto - Entity
변환 Config 코드이며,Dto - Entity - Dto
로 다시 변환을 원하는 경우Entity-Dto
로 변환하는 Config도 작성해야 합니다.
// program.cs 위 예제 코드에서 아래 Config를 추가해 준다.
TypeAdapterConfig<MemberDto, Member>.NewConfig()
.AfterMapping((src, dest) =>
{
dest.Address = $"{src.Address1}@@{src.Address2}@@{src.Address3}";
dest.PhoneNumber = src.Tel;
});
TypeAdapterConfig<Member, MemberDto>.NewConfig()
.AfterMapping((src, dest) => //Member에서 MemberDto로 변환하는 코드
{
string[] split = src.Address.Split("@@");
dest.Address1 = split[0];
dest.Address2 = split[1];
dest.Address3 = split[2];
dest.Tel = src.PhoneNumber;
});
- 다음은 전체 예제 코드 입니다.
using Mapster;
Console.WriteLine($"MapSter Start!!");
// program.cs 위 예제 코드에서 아래 Config를 추가해 준다.
TypeAdapterConfig<MemberDto, Member>.NewConfig()
.AfterMapping((src, dest) =>
{
dest.Address = $"{src.Address1}@@{src.Address2}@@{src.Address3}";
dest.PhoneNumber = src.Tel;
});
TypeAdapterConfig<Member, MemberDto>.NewConfig()
.AfterMapping((src, dest) => //Member에서 MemberDto로 변환하는 코드
{
string[] split = src.Address.Split("@@");
dest.Address1 = split[0];
dest.Address2 = split[1];
dest.Address3 = split[2];
dest.Tel = src.PhoneNumber;
});
MemberDto memberDto = new()
{
Id = 99,
Address1 = "경기도",
Address2 = "수원시",
Address3 = "어딘가...",
Description = "테스트 데이터",
Name = "Test Name",
Tel = "010-0000-0303",
};
var member = memberDto.Adapt<Member>();
Console.WriteLine($"ID : {member.Id}");
Console.WriteLine($"Address : {member.Address}");
Console.WriteLine($"Name : {member.Name}");
Console.WriteLine($"Description : {member.Description}");
Console.WriteLine($"TelNumber : {member.PhoneNumber}");
public class Member
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Address { get; set; } // DTO 에서 데이터가 3개로 분리됨.
public string PhoneNumber { get; set; } // DTO에서 Tel로 변경됨.
}
public class MemberDto
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Address1 { get; set; } // Address 시 군
public string Address2 { get; set; } // Address 구
public string Address3 { get; set; } // Address 상세주소.
public string Tel { get; set; } // Member.PhoneNumber과 Mapping
}
실행 결과
- 실행 결과, 프로퍼티가 달라도 맵핑이 정상적으로 된 것을 확인할 수 있습니다.
MapSter Start!!
ID : 99
Address : 경기도@@수원시@@어딘가...
Name : Test Name
Description : 테스트 데이터
TelNumber : 010-0000-0303
728x90
'C# > C# 문법' 카테고리의 다른 글
[C# 문법] C# List<T> Linq 중복 검사 하기 (0) | 2022.05.19 |
---|---|
[C# MapSter] 순환참조 인 경우 맵핑하기 (0) | 2022.05.15 |
[C# 문법] C# JSON 데이터 Serialize, DeSerialize 하기 (0) | 2022.05.12 |
[C# 동시성 프로그래밍] 완료한 작업 반환 (0) | 2022.05.12 |
[C#] C# Mapster 사용법 (0) | 2022.05.11 |
이 글을 공유하기