https://github.com/dimitrietataru/ace-csharp-structured-automapper
Structured AutoMapper
https://github.com/dimitrietataru/ace-csharp-structured-automapper
automapper automapper-profiles csharp one-way-profile two-way-profile
Last synced: 27 days ago
JSON representation
Structured AutoMapper
- Host: GitHub
- URL: https://github.com/dimitrietataru/ace-csharp-structured-automapper
- Owner: dimitrietataru
- License: mit
- Created: 2023-03-22T21:50:11.000Z (over 3 years ago)
- Default Branch: ace
- Last Pushed: 2026-06-15T11:10:19.000Z (29 days ago)
- Last Synced: 2026-06-15T13:08:07.695Z (29 days ago)
- Topics: automapper, automapper-profiles, csharp, one-way-profile, two-way-profile
- Language: C#
- Homepage:
- Size: 89.8 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Ace.CSharp.StructuredAutoMapper
[](https://github.com/dimitrietataru/ace-csharp-structured-automapper/actions/workflows/build.yml)
[](https://github.com/dimitrietataru/ace-csharp-structured-automapper/actions/workflows/release.yml)
[](https://www.nuget.org/packages/AceCSharp.StructuredAutoMapper)
[](https://www.nuget.org/packages/AceCSharp.StructuredAutoMapper.Abstractions)
[](https://www.nuget.org/packages/AceCSharp.StructuredAutoMapper.Abstractions.Test)
## Usage
### One-way Mapping Profile
``` csharp
record BarEntity(Guid Id, string Value);
record BarDto(Guid Id, string Value);
class BarMappingProfile : OneWayProfile
{
}
```
### Two-way Mapping Profile
``` csharp
record FooEntity(Guid Id, string Value);
record FooDto(Guid Id, string Value);
class FooMappingProfile : TwoWayProfile
{
}
```
### Two-way Mapping Profile (Explicit)
``` csharp
class TransactionEntity
{
public int Id { get; set; }
public Guid OperatorId { get; set; }
public DateTimeOffset ProcessedAt { get; set; }
public double Amount { get; set; }
}
class TransactionDto
{
public int Id { get; set; }
public long ProcessedAt { get; set; }
public double Amount { get; set; }
}
class TransactionMappingProfile : TwoWayProfile
{
public override void ConfigureLeftToRightMapping()
{
CreateMap()
.ForMember(
dto => dto.Id,
options => options.MapFrom(entity => entity.Id))
.ForMember(
dto => dto.ProcessedAt,
options => options.MapFrom(entity => entity.ProcessedAt.ToUnixTimeMilliseconds()))
.ForMember(
dto => dto.Amount,
options => options.MapFrom(entity => entity.Amount));
}
public override void ConfigureRightToLeftMapping()
{
CreateMap()
.ForMember(
entity => entity.Id,
options => options.MapFrom(dto => dto.Id))
.ForMember(
entity => entity.OperatorId,
options => options.Ignore())
.ForMember(
entity => entity.ProcessedAt,
options => options.MapFrom(dto => DateTimeOffset.FromUnixTimeMilliseconds(dto.ProcessedAt)))
.ForMember(
entity => entity.Amount,
options => options.MapFrom(dto => dto.Amount));
}
}
```
## Tests
https://github.com/dimitrietataru/ace-csharp-structured-automapper/blob/c6ea69337be410cbaa96df3db9c57e6d01308b07/src/sample/Ace.CSharp.StructuredAutoMapper.Sample.Tests/BarMappingProfileTests.cs#L8-L43
https://github.com/dimitrietataru/ace-csharp-structured-automapper/blob/c6ea69337be410cbaa96df3db9c57e6d01308b07/src/sample/Ace.CSharp.StructuredAutoMapper.Sample.Tests/FooMappingProfileTests.cs#L8-L54
https://github.com/dimitrietataru/ace-csharp-structured-automapper/blob/c6ea69337be410cbaa96df3db9c57e6d01308b07/src/sample/Ace.CSharp.StructuredAutoMapper.Sample.Tests/TransactionMappingProfileTests.cs#L8-L70
### See also
* [AutoMapper](https://github.com/AutoMapper/AutoMapper)
* [FluentAssertions](https://github.com/fluentassertions/fluentassertions)
### License
AceCSharp.StructuredAutoMapper is Copyright © 2023 [Dimitrie Tataru](https://github.com/dimitrietataru) and other contributors under the [MIT license](https://github.com/dimitrietataru/ace-csharp-structured-automapper/blob/ace/LICENSE).