ObjectSemantics.NET
6.0.5
dotnet add package ObjectSemantics.NET --version 6.0.5
NuGet\Install-Package ObjectSemantics.NET -Version 6.0.5
<PackageReference Include="ObjectSemantics.NET" Version="6.0.5" />
<PackageVersion Include="ObjectSemantics.NET" Version="6.0.5" />
<PackageReference Include="ObjectSemantics.NET" />
paket add ObjectSemantics.NET --version 6.0.5
#r "nuget: ObjectSemantics.NET, 6.0.5"
#:package ObjectSemantics.NET@6.0.5
#addin nuget:?package=ObjectSemantics.NET&version=6.0.5
#tool nuget:?package=ObjectSemantics.NET&version=6.0.5
ObjectSemantics.NET
Simple and flexible object-to-template string mapper with formatting support
๐ง Overview
ObjectSemantics.NET is a lightweight C# library that lets you inject object property values directly into string templates much like Handlebars or Helm templates, but focused on .NET.
This is especially useful when you want to dynamically generate content such as:
- Email templates
- HTML fragments
- Reports or invoices
- Config files
- Logging output
It supports:
- โ
Plain object property injection (
{{ PropertyName }}
) - โ Additional external parameters
- โ
Enumerable collections with looping (
#foreach
) - โ Built-in string, date, and number formatting
๐ฆ Installation
Install from NuGet:
Install-Package ObjectSemantics.NET
๐ Quick Start
Example 1: Basic Object Property Mapping
// Create model
Student student = new Student
{
StudentName = "George Waynne",
Balance = 2510
};
// Define template
var template = new ObjectSemanticsTemplate
{
FileContents = @"My Name is: {{ StudentName }} and my balance is {{ Balance:N2 }}"
};
// Map object to template
string result = template.Map(student);
Console.WriteLine(result);
Output:
My Name is: George Waynne and my balance is 2,510.00
Example 2: Mapping Enumerable Collections
Student student = new Student
{
StudentName = "John Doe",
Invoices = new List<Invoice>
{
new Invoice { Id = 2, RefNo = "INV_002", Narration = "Grade II Fees Invoice", Amount = 2000, InvoiceDate = new DateTime(2023, 04, 01) },
new Invoice { Id = 1, RefNo = "INV_001", Narration = "Grade I Fees Invoice", Amount = 320, InvoiceDate = new DateTime(2022, 08, 01) }
}
};
var template = new ObjectSemanticsTemplate
{
FileContents = @"{{ StudentName }} Invoices
{{ #foreach(Invoices) }}
<tr>
<td>{{ Id }}</td>
<td>{{ RefNo }}</td>
<td>{{ Narration }}</td>
<td>{{ Amount:N0 }}</td>
<td>{{ InvoiceDate:yyyy-MM-dd }}</td>
</tr>
{{ #endforeach }}"
};
string result = template.Map(student);
Console.WriteLine(result);
Output:
John Doe Invoices
<tr>
<td>2</td>
<td>INV_002</td>
<td>Grade II Fees Invoice</td>
<td>2,000</td>
<td>2023-04-01</td>
</tr>
<tr>
<td>1</td>
<td>INV_001</td>
<td>Grade I Fees Invoice</td>
<td>320</td>
<td>2022-08-01</td>
</tr>
๐งช More Samples
Explore more usage examples and edge cases in the test project:
๐ ObjectSemantics.NET.Tests
๐ค Contributing
Feel free to open issues or contribute improvements via pull requests!
๐ MIT License
Product | Versions 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. |
-
.NETStandard 2.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.
. Added support for single arrays Loop Support
. Added encoding string formattings
ToMD5
ToBase64
FromBase64
. Added template extension method to allow mapping directly from Template