Я создал библиотеку, чтобы сделать это и предоставить некоторые дополнительные метаданные.Он полагается на MVC ModelMetadata
и DataAnnotations
, чтобы обеспечить «читаемую версию» diff для нетехнических пользователей.
https://github.com/paultyng/ObjectDiff
Для таких объектов, как (очевидно, без метаданных):
var before = new
{
Property1 = "",
MultilineText = "abc\ndef\nghi",
ChildObject = new { ChildProperty = 7 },
List = new string[] { "a", "b" }
};
var after = new
{
Property1 = (string)null,
MultilineText = "123\n456",
NotPreviouslyExisting = "abc",
ChildObject = new { ChildProperty = 6 },
List = new string[] { "b", "c" }
};
Будет выведено что-то вроде:
ChildObject - ChildProperty: '6', was '7'
List - [2, added]: 'c', was not present
List - [removed]: No value present, was 'a'
MultilineText:
-----
123
456
-----
was
-----
abc
def
ghi
-----
NotPreviouslyExisting: 'abc', was not present