DynamoMapper 1.0.1.22

dotnet add package DynamoMapper --version 1.0.1.22
                    
NuGet\Install-Package DynamoMapper -Version 1.0.1.22
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DynamoMapper" Version="1.0.1.22" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="DynamoMapper" Version="1.0.1.22" />
                    
Directory.Packages.props
<PackageReference Include="DynamoMapper" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add DynamoMapper --version 1.0.1.22
                    
#r "nuget: DynamoMapper, 1.0.1.22"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package DynamoMapper@1.0.1.22
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=DynamoMapper&version=1.0.1.22
                    
Install as a Cake Addin
#tool nuget:?package=DynamoMapper&version=1.0.1.22
                    
Install as a Cake Tool

DynamoMapper

High-performance source generator for DynamoDB attribute mapping

NuGet Build Status License: MIT Documentation


DynamoMapper is a .NET incremental source generator that generates high-performance mapping code between domain models and Amazon DynamoDB AttributeValue dictionaries. Using compile-time code generation, it eliminates runtime reflection, reduces allocations, and provides type-safe mapping for single-table DynamoDB patterns.

Why DynamoMapper?

  • ⚑ Zero reflection overhead - All mapping code generated at compile time
  • 🎯 Type-safe - Catches configuration errors at compile time with diagnostics
  • πŸš€ Allocation-free - Uses efficient dictionary operations, no LINQ or unnecessary allocations
  • πŸ”§ Simple - Convention-first with minimal attribute configuration
  • 🌐 Single-table friendly - Designed for single-table DynamoDB patterns with customization hooks
  • πŸ“¦ Clean domain models - No attributes on your domain classes required

πŸ“š View Full Documentation

Installation

Install the NuGet package:

dotnet add package DynamoMapper --prerelease

Ensure your project uses C# 11 or later:

<PropertyGroup>
  <LangVersion>11</LangVersion>
  
</PropertyGroup>

Quick Start

1. Define your domain model

public class Product
{
    public string UserId { get; set; }
    public Guid ProductId { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public string? Description { get; set; }
    public ProductStatus Status { get; set; }
}

2. Create a mapper class

using DynamoMapper.Runtime;
using Amazon.DynamoDBv2.Model;

namespace MyApp.Data;

[DynamoMapper(Convention = DynamoNamingConvention.CamelCase)]
[DynamoField(nameof(Product.Description), OmitIfNull = true, OmitIfEmptyString = true)]
public static partial class ProductMapper
{
    public static partial Dictionary<string, AttributeValue> ToItem(Product source);

    public static partial Product FromItem(Dictionary<string, AttributeValue> item);
}

3. That's it!

At compile time, DynamoMapper generates the mapping code. Use it like this:

var product = new Product
{
    UserId = "user-123",
    ProductId = Guid.NewGuid(),
    Name = "Laptop",
    Price = 999.99m,
    Status = ProductStatus.Available
};

// Convert to DynamoDB item
var item = ProductMapper.ToItem(product);
await dynamoDbClient.PutItemAsync(new PutItemRequest
{
    TableName = "MyTable",
    Item = item
});

// Convert from DynamoDB item
var getResponse = await dynamoDbClient.GetItemAsync(new GetItemRequest
{
    TableName = "MyTable",
    Key = new Dictionary<string, AttributeValue>
    {
        ["pk"] = new AttributeValue { S = $"USER#{product.UserId}" },
        ["sk"] = new AttributeValue { S = $"PRODUCT#{product.ProductId}" }
    }
});
var retrievedProduct = ProductMapper.FromItem(getResponse.Item);

For more examples including single-table patterns and custom converters, see the Quick Start Guide.

Key Features

  • Attribute-Based Configuration (Phase 1): Configure mapping via [DynamoField] and [DynamoIgnore] on mapper classes
  • Fluent DSL Configuration (Phase 2): Optional strongly-typed DSL for configuration
  • Naming Conventions: CamelCase, SnakeCase, or Exact field naming
  • Required Field Validation: Compile-time and runtime validation of required fields
  • Omission Policies: Flexible null/empty value omission strategies
  • Custom Converters: Type-safe converter pattern for custom serialization
  • Customization Hooks: Before/After hooks for injecting pk/sk and custom logic
  • Single-Table Support: Built for single-table DynamoDB design patterns
  • Supported Types: strings, numerics, bool, Guid, DateTime, DateTimeOffset, TimeSpan, enums, plus lists/maps/sets of supported element types
  • Comprehensive Diagnostics: Clear compile-time errors with actionable messages
  • Zero Configuration: Sensible defaults for most use cases

Learn more in the Core Concepts documentation.

Requirements

  • C# 11+ (for partial method generation)
  • .NET Standard 2.0+ (package targets)
  • AWSSDK.DynamoDBv2 (for AttributeValue types)

See the Requirements page for full details.

Documentation

πŸ“– Full Documentation - Comprehensive guides and API reference

Key sections:

Contributing

Contributions are welcome! See our Contributing Guide for details.

License

This project is licensed under the MIT License - see the LICENSE file for details.


Made with ⚑ by the LayeredCraft team

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  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 was computed.  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 was computed.  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. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.1.22 26 1/23/2026
1.0.1.21 23 1/23/2026
1.0.0.20 36 1/21/2026
1.0.0-beta.19 28 1/21/2026
1.0.0-beta.18 40 1/19/2026
1.0.0-beta.17 59 1/17/2026
1.0.0-beta.16 37 1/16/2026
1.0.0-beta.15 41 1/16/2026
1.0.0-beta.14 40 1/16/2026
1.0.0-beta.13 43 1/16/2026
0.1.0-alpha.12 44 1/16/2026
0.1.0-alpha.11 46 1/16/2026
0.1.0-alpha.10 44 1/14/2026
0.1.0-alpha.9 46 1/14/2026
0.1.0-alpha.8 52 1/14/2026
0.1.0-alpha.7 41 1/14/2026
0.1.0-alpha.6 41 1/14/2026
0.1.0-alpha.5 41 1/14/2026
0.1.0-alpha.4 59 1/13/2026
0.1.0-alpha.3 47 1/13/2026
0.1.0-alpha.2 50 1/8/2026
0.1.0-alpha.1 45 1/8/2026