TypeMerger 2.1.0
See the version list below for details.
dotnet add package TypeMerger --version 2.1.0
NuGet\Install-Package TypeMerger -Version 2.1.0
<PackageReference Include="TypeMerger" Version="2.1.0" />
paket add TypeMerger --version 2.1.0
#r "nuget: TypeMerger, 2.1.0"
// Install TypeMerger as a Cake Addin #addin nuget:?package=TypeMerger&version=2.1.0 // Install TypeMerger as a Cake Tool #tool nuget:?package=TypeMerger&version=2.1.0
TypeMerger - Merge two objects into one
TypeMerger is a simple convention-based object merger for .NET Core. It allows two objects of any type to be merged into a new object. Object properties can be ignored and any collisions can be resolved using a fluent api. The object returned is a new Type
that is dynamically generated and loaded using System.Reflection.Emit
.
Dependencies
None
How is it used?
Simple usage
This will result in a new object that has All the properties from obj1 and obj2.
var result = TypeMerger.Merge(obj1, obj2);
Ignore Certain Properties
This will result in a new object that has all of the properties from Obj1 and Obj2 Except for SomeProperty
from obj1 and AnotherProperty
from obj2.
var result = TypeMerger.Ignore(() => obj1.SomeProperty)
.Ignore(() => obj2.AnotherProperty)
.Merge(obj1, obj2);
What About Collisions?
If both objects have the same property there is a fluent method that will tell the Merger
which object to use for that property. You simply tell the Merger
which property to Use
.
In this example given obj1 and obj2 that both have SomeProperty
, the value from obj2 will be used.
var result = TypeMerger.Use(() => obj2.SomeProperty)
.Merge(obj1, obj2);
What about collisions which Use
hasn't specified which object's property to use?
If both objects have the same property, and you do not specify which one to Use
, then the property from the first object passed to Merge
will be used. (Look at the Merge_Types_with_Name_Collision
unit test for an example.)
Mix & Match Your Merge
Combining the .Ignore
and .Use
fluent methods allows you to pick and choose what you want from your objects.
var obj1 = new {
SomeProperty = "foo",
SomeAmount = 20,
AnotherProperty = "yo"
};
var obj2 = new {
SomeProperty = "bar",
SomePrivateStuff = "SECRET!!",
SomeOtherProperty = "more stuff"
};
var result = TypeMerger.Ignore(() => obj1.AnotherProperty)
.Use(() => obj2.SomeProperty)
.Ignore(() => obj2.SomePrivateStuff)
.Merge(obj1, obj2);
The result object will have the following properties and values:
SomeProperty: "bar"
SomeAmount: 20
SomeOtherProperty: "more stuff"
History
The code is based on the original TypeMerger class written by Mark Miller. Updated, enhanced, and now maintained by Kyle Finley.
Original posting: KyleFinley.net/typemerger
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. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | 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.1
- No dependencies.
NuGet packages (3)
Showing the top 3 NuGet packages that depend on TypeMerger:
Package | Downloads |
---|---|
OuroborosAI.Core
Powerful layer on top of OpenAI supporting chaining and recursion scenarios. Includes fluent SDK for chaining, templates, and text processing. Still very early an .NET 7 only; Docs and broader support to follow. |
|
AspNetCore.InertiaCore
Inertia.js ASP.NET Adapter. https://inertiajs.com/ |
|
Spark.InertiaJs
Inertia.js ASP.NET Adapter. https://inertiajs.com/ |
GitHub repositories
This package is not used by any popular GitHub repositories.