Simple.AutoMapper
1.0.12
dotnet add package Simple.AutoMapper --version 1.0.12
NuGet\Install-Package Simple.AutoMapper -Version 1.0.12
<PackageReference Include="Simple.AutoMapper" Version="1.0.12" />
<PackageVersion Include="Simple.AutoMapper" Version="1.0.12" />
<PackageReference Include="Simple.AutoMapper" />
paket add Simple.AutoMapper --version 1.0.12
#r "nuget: Simple.AutoMapper, 1.0.12"
#:package Simple.AutoMapper@1.0.12
#addin nuget:?package=Simple.AutoMapper&version=1.0.12
#tool nuget:?package=Simple.AutoMapper&version=1.0.12
Simple.AutoMapper
High-performance object mapping for .NET with expression tree compilation. Simple API, powerful configuration options.
Latest - Patch overloads (new object, type-inferred, collection), Map in-place via
ISimpleMapper. See Release Notes.
Installation
dotnet add package Simple.AutoMapper
Target Frameworks: net8.0, net9.0, net10.0
Quick Start
using Simple.AutoMapper.Core;
// Map — copy all properties to new object
var dto = Mapper.Map<User, UserDto>(user);
// Patch — copy only non-null properties (HTTP PATCH scenario)
Mapper.Patch(partialDto, existingEntity);
Before & After
// ❌ Without Simple.AutoMapper — manual property-by-property copy
var dto = new UserDto();
dto.Id = user.Id;
dto.FirstName = user.FirstName;
dto.LastName = user.LastName;
dto.Email = user.Email;
// ... repeat for every property, every model, every service
// ✅ With Simple.AutoMapper — one line
var dto = Mapper.Map<User, UserDto>(user);
For the full before/after comparison of every feature, see the Usage Guide.
Performance
- Expression tree compilation for fast subsequent mappings
- Thread-safe caching of compiled mappers
- First mapping incurs compilation cost; subsequent calls are optimized
Test Coverage
- 242+ tests passing
- 92.9% line coverage, 88.8% branch coverage
Documentation
- Usage Guide — Before/after examples, API reference, patterns
- Release Notes
- Tasks & Roadmap
- Deployment Guide
- Contributing
Samples
| Sample | Location | Demonstrates |
|---|---|---|
| Console | samples/Console/ |
All 19 features with static Mapper |
| WebAPI | samples/WebAPI/ |
REST API with DI, PUT/PATCH endpoints |
License
MIT License - see LICENSE.md
Team
Core Development Team
- SEONGAHN - Lead Developer & Project Architect
- YUJIN - Senior Developer & Exchange Integration Specialist
- SEJIN - Software Developer & API Implementation
Built with care by the ODINSOFT Team | GitHub
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.7)
- Microsoft.Extensions.Logging (>= 10.0.7)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.7)
-
net8.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.7)
- Microsoft.Extensions.Logging (>= 10.0.7)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.7)
-
net9.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.7)
- Microsoft.Extensions.Logging (>= 10.0.7)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.7)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
v1.0.12
Add DateOnly and TimeOnly mapping support
DateOnly, TimeOnly, and their nullable forms are now recognized as simple types
and copied by direct assignment. Previously they were silently skipped: as structs
they matched neither IsSimpleType (which listed only DateTime/DateTimeOffset/TimeSpan)
nor IsComplexType (which requires a class), so no mapping branch handled them and the
destination was left at its default value (0001-01-01 / 00:00:00).
- Add DateOnly and TimeOnly to IsSimpleType; nullable forms handled by the existing path
- Add [Owned] entity mapping tests
- Disable snupkg generation (redundant with embedded PDB)