starfury-dev
1.0.0
dotnet add package starfury-dev --version 1.0.0
NuGet\Install-Package starfury-dev -Version 1.0.0
<PackageReference Include="starfury-dev" Version="1.0.0" />
<PackageVersion Include="starfury-dev" Version="1.0.0" />
<PackageReference Include="starfury-dev" />
paket add starfury-dev --version 1.0.0
#r "nuget: starfury-dev, 1.0.0"
#:package starfury-dev@1.0.0
#addin nuget:?package=starfury-dev&version=1.0.0
#tool nuget:?package=starfury-dev&version=1.0.0
StarFuryDev.ObjectMapper
A simple and lightweight 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
Usage Examples
Basic Mapping
var mapper = new ObjectMapper();
var person = new Person { FirstName = "Jane", LastName = "Doe" };
var personDto = mapper.Map<Person, PersonDto>(person);
Custom Property Mapping
mapper.CreateMap<Source, Destination>()
.ForMember(dest => dest.FullName, opt => opt.MapFrom(src => $"{src.FirstName} {src.LastName}"))
.ForMember(dest => dest.IsActive, opt => opt.MapFrom(src => src.Status == "Active"));
Mapping Collections
var sourceList = new List<Source>
{
new Source { Name = "Alice" },
new Source { Name = "Bob" }
};
var destinationList = mapper.Map<List<Source>, List<Destination>>(sourceList);
Ignore Properties
mapper.CreateMap<Source, Destination>()
.ForMember(dest => dest.InternalId, opt => opt.Ignore());
Configuration Options
var config = new MapperConfiguration(cfg =>
{
cfg.CaseSensitive = false; // Match properties case-insensitively
cfg.AllowNullValues = true; // Allow mapping null values
cfg.CreateMap<Source, Destination>();
});
var mapper = new ObjectMapper(config);
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:
- Open an issue to discuss it
- Create a feature branch
- 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
License
This project is licensed under the MIT License - see the LICENSE file for details.
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
- GitHub: @yourusername
- Issues: GitHub Issues
⭐ If you find this project useful, consider giving it a star on GitHub!
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | 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 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. |
-
net9.0
- No dependencies.
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.0 | 229 | 12/21/2025 |