What you have been waiting for. Perform a deep compare of any two .NET objects using reflection. Shows the differences between the two objects.
- Compatible with .NET Framework 4.0 and higher.
- .NET Standard 1.3 Build Compatible with .NET Core 1.0, Mono 4.6, Xamarin.iOS 10.0, Xamarin.Mac 3.0, Xamarin.Android 7.0, Universal Windows Platform 10.0
- .NET Standard 2.0 Build Compatible with .NET Core 2.0, Mono 5.4, Xamarin.iOS 10.14, Xamarin.Mac 3.8, Xamarin.Android 8.0, Universal Windows Platform 10.0.16299, Unity 2018.1
- .NET Standard 2.1 Build Compatible with .NET 5, Mono 6.4, Xamarin.iOS 12.16, Xamarin.Mac 5.16, Xamarin.Android 10.0
http://www.nuget.org/packages/CompareNETObjects
Install with NuGet Package Manager Console
Install-Package CompareNETObjects
Install with .NET CLI
dotnet add package CompareNETObjects
- Compare Children (on by default)
- Handling for Trees with Children Pointing To Parents (Circular References)
- Compares Publicly Visible Class Fields and Properties
- Compares Private Fields and Properties (off by default)
- Source code in C#
- NUnit Test Project Included with over 200+ unit tests
- Ability to load settings from a config file for use with powershell
- Ability to pass in the configuration
- Ability to save and load the configuration as json
- Test Extensions .ShouldCompare and .ShouldNotCompare
- Several configuration options for comparing private elements, ignoring specific elements, including specific elements.
- Property and Field Info reflection caching for increased performance
- Rich Differences List or simple DifferencesString
- Difference Callback
- Supports custom comparison for types and properties
- ElapsedMilliseconds indicates how long the comparison took
- Thread Safe
- Beyond Compare Report
- WinMerge Report
- CSV Report
- User Friendly Report
- HTML Report
- Ability to IgnoreCollectionOrder to compare lists of different lengths
- Ability to ignore indexer comparison
- Ability to ignore types
- Ability to ignore specific members by name or by wildcard
- Interface member filtering
- Ability to treat string.empty and null as equal
- Ability to ignore string leading and trailing whitespace
- Case insensitive option for strings
- Ignore millisecond differences between DateTime values or DateTimeOffset values
- Precision for double or decimal values
- Classes
- Dynamic (Expando objects are supported but not DynamicObject)
- Anonymous Types
- Primitive Types (String, Int, Boolean, etc.)
- Structs
- IList Objects
- Collections
- Single and Multi-Dimensional Arrays
- Immutable Arrays
- IDictionary Objects
- Enums
- Timespans
- Guids
- Classes that Implement IList with Integer Indexers
- DataSet Data
- DataTable Data
- DataRow Data
- DataColumn Differences
- LinearGradient
- HashSet
- URI
- IPEndPoint
- Types of Type (RuntimeType)
- StringBuilder
- SByte
- Custom Collections with Non-Integer Indexers cannot be compared.
- Private properties and fields cannot be compared for .NET Core 1.3. They are allowed to be compared in .NET Core 2.0 and higher.
- DynamicObject type is not supported but will be implemented in 2020 when the library is versioned to .NET Framework 4.5
- When ignoring the collection order, the collection matching spec must be a property on the class. It cannot be a field or a property on a child or parent class. The property has to be a simple type.
https://github.com/GregFinzer/Compare-Net-Objects/wiki/Getting-Started
https://github.com/GregFinzer/Compare-Net-Objects/wiki/Licensing