Skip to content

starfury-dev/ObjectMapper

Repository files navigation

StarFuryDev.ObjectMapper

NuGet License: MIT

A simple and lightweight attribute based object mapping library for .NET, built as a hobby project to make object-to-object mapping easier.

Why This Library?

I created this library as a personal learning project and wanted to share it with the community. While there are other great mapping libraries out there, I built this to:

  • Learn more about reflection and attributes in C#
  • Explore different approaches to object mapping
  • Share something useful with the .NET community

Feel free to use it or just peek at the code!

Installation

Install via NuGet Package Manager:

dotnet add package StarFuryDev.ObjectMapper

Or via Package Manager Console:

Install-Package StarFuryDev.ObjectMapper

Quick Start

using StarFuryDev.ObjectMapper;

// Source data
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

// Destination
[MapFrom(nameof(Person))]
public class Profile
{
    // default mapping - source property name = destination property name
    public string FirstName { get; set; }

    // Map from using a custom converter
    [MapFromUsing(typeof(CustomConverters), nameof(CustomConverters.ConvertToFullName))]
    public string FullName { get; set; }
    
    // Map from using a different property 
    [MapFrom(nameof(Source.Age))]
    public int MyAge { get; set; }

    // Ignore when mapping
    [MapIgnore]
    prop string Address { get; set; }
}

public static class CustomConverters
{
    public static string ConvertToFullName(string firstName, string lastName)
    {
        return $"{firstName} {lastname}";
    }
}

// Simple mapping
var person = new Person { FirstName = "John", LastName = "Smith" Age = 30 };
var profile = Mapper.Map<Person, Profile>(person);

Features

  • ✨ Simple, Attribute based mapping
  • 🔧 Property name matching (case-sensitive)
  • 📦 Lightweight with no dependencies
  • 🎯 Convention-based (default name to name) mapping
  • 🔄 List<> and Dictionary<,> mapping support
  • ⚙️ Custom mapping converter support
  • 🎯 Null source properties ignored as default

Limitations

Since this is a hobby project, there are some limitations:

  • Not as feature-rich as AutoMapper or Mapster

Contributing

This is a hobby project, but contributions are welcome! If you find a bug or have an idea:

  1. Open an issue to discuss it
  2. Create a feature branch
  3. Submit a pull request

No contribution is too small - typo fixes, documentation improvements, and feature suggestions are all appreciated!

Building from Source

# Clone the repository
git clone https://github.com/starfury-dev/ObjectMapper.git

# Restore dependencies
dotnet restore

# Build
dotnet build

# Run tests
dotnet test

Acknowledgments

  • Inspired by other great mapping libraries in the .NET ecosystem
  • Thanks to the .NET community for feedback and support
  • Built with ❤️ as a learning project

Contact


⭐ If you find this project useful, consider giving it a star on GitHub!

About

A simple dotnet object mapper library

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages