Compare ExpandoObject (Dynamic)
masterYou can compare ExpandoObject instances using the parameterless Comparer() constructor. The framework detects missing members and type mismatches across dynamic properties.
Configuration:
By default, if a member exists in one object but not the other, it is reported as MissedMemberInSecondObject or MissedMemberInFirstObject. You can change this behavior using ComparisonSettings:
Set UseDefaultIfMemberNotExist = true to treat missing members as having a default value instead of reporting them as missing.
// Default behavior
dynamic a1 = new ExpandoObject();
a1.Field1 = "A";
dynamic a2 = new ExpandoObject();
a2.Field1 = "B";
var comparer = new Comparer();
// Using ComparisonSettings to treat missing members as default values
dynamic a1 = new ExpandoObject();
a1.Field1 = "A";
a1.Field2 = 0;
dynamic a2 = new ExpandoObject();
a2.Field1 = "B";
a2.Field4 = "S";
var comparer = new Comparer(new ComparisonSettings { UseDefaultIfMemberNotExist = true });