@@ -25,7 +25,10 @@ public class EntityComparer
2525 /// <summary>
2626 /// Compare two entities and return changed fields
2727 /// </summary>
28- public static List < FieldChange > Compare < TEntity > ( TEntity oldEntity , TEntity newEntity , IEnumerable < IAuditValueProvider > valueProviders = null ) where TEntity : class
28+ public static List < FieldChange > Compare < TEntity > ( TEntity oldEntity ,
29+ TEntity newEntity ,
30+ IEnumerable < IAuditValueProvider > valueProviders = null )
31+ where TEntity : class
2932 {
3033 var changes = new List < FieldChange > ( ) ;
3134
@@ -49,7 +52,11 @@ public static List<FieldChange> Compare<TEntity>(TEntity oldEntity, TEntity newE
4952 /// <summary>
5053 /// Recursively compare entities
5154 /// </summary>
52- private static void CompareRecursive ( object oldObj , object newObj , string prefix , List < FieldChange > changes , IEnumerable < IAuditValueProvider > valueProviders , PropertyInfo currentPropertyInfo )
55+ private static void CompareRecursive ( object oldObj , object newObj ,
56+ string prefix ,
57+ List < FieldChange > changes ,
58+ IEnumerable < IAuditValueProvider > valueProviders ,
59+ PropertyInfo currentPropertyInfo )
5360 {
5461 if ( oldObj == null && newObj == null )
5562 {
@@ -114,7 +121,12 @@ private static bool IsSimpleType(Type type)
114121 /// <summary>
115122 /// Compare collection types
116123 /// </summary>
117- private static void CompareCollection ( object oldObj , object newObj , string fieldName , List < FieldChange > changes , IEnumerable < IAuditValueProvider > valueProviders , PropertyInfo currentPropertyInfo )
124+ private static void CompareCollection ( object oldObj ,
125+ object newObj ,
126+ string fieldName ,
127+ List < FieldChange > changes ,
128+ IEnumerable < IAuditValueProvider > valueProviders ,
129+ PropertyInfo currentPropertyInfo )
118130 {
119131 var oldList = oldObj as IEnumerable ;
120132 var newList = newObj as IEnumerable ;
@@ -153,7 +165,7 @@ private static void CompareCollection(object oldObj, object newObj, string field
153165 // Check if elementType is a simple type (value type or string)
154166 if ( IsSimpleType ( elementType ) )
155167 {
156- CompareSimpleElements ( fieldName , changes , oldItems , newItems ) ;
168+ CompareSimpleElements ( fieldName , changes , oldItems , newItems , valueProviders , currentPropertyInfo ) ;
157169 return ;
158170 }
159171
@@ -213,7 +225,12 @@ private static void CompareCollection(object oldObj, object newObj, string field
213225 }
214226 }
215227
216- private static void CompareSimpleElements ( string fieldName , List < FieldChange > changes , List < object > oldItems , List < object > newItems )
228+ private static void CompareSimpleElements ( string fieldName ,
229+ List < FieldChange > changes ,
230+ List < object > oldItems ,
231+ List < object > newItems ,
232+ IEnumerable < IAuditValueProvider > valueProviders ,
233+ PropertyInfo currentPropertyInfo )
217234 {
218235 // Handle simple types: compare which values were added or removed
219236 var oldSet = new HashSet < object > ( oldItems . Where ( i => i != null ) ) ;
@@ -227,7 +244,7 @@ private static void CompareSimpleElements(string fieldName, List<FieldChange> ch
227244 {
228245 Field = fieldName ,
229246 OldValue = null ,
230- NewValue = $ "{{Added}} { JsonConverter . Serialize ( addedItems ) } "
247+ NewValue = $ "{{Added}} { SerializeValue ( addedItems , currentPropertyInfo , valueProviders ) } "
231248 } ) ;
232249 }
233250
@@ -238,7 +255,7 @@ private static void CompareSimpleElements(string fieldName, List<FieldChange> ch
238255 changes . Add ( new FieldChange
239256 {
240257 Field = fieldName ,
241- OldValue = $ "{{Removed}} { JsonConverter . Serialize ( deletedItems ) } ",
258+ OldValue = $ "{{Removed}} { SerializeValue ( deletedItems , currentPropertyInfo , valueProviders ) } ",
242259 NewValue = null
243260 } ) ;
244261 }
@@ -338,7 +355,7 @@ private static string GetDisplayPropertyName(PropertyInfo property, IEnumerable<
338355
339356 return property . Name ;
340357 }
341-
358+
342359 public static string GetKeyAndTitle < TEntity > ( TEntity item ) where TEntity : class
343360 {
344361 var type = typeof ( TEntity ) ;
@@ -481,19 +498,6 @@ private static bool AreEqual(object value1, object value2)
481498 return value1 . Equals ( value2 ) ;
482499 }
483500
484- /// <summary>
485- /// Serialize value to string
486- /// </summary>
487- public static string SerializeValue ( object value )
488- {
489- if ( value == null ) return null ;
490-
491- if ( value is string str ) return str ;
492- if ( value is DateTime dt ) return dt . ToString ( "yyyy-MM-dd HH:mm:ss" ) ;
493-
494- return value . ToString ( ) ;
495- }
496-
497501 /// <summary>
498502 /// Serialize value to string with property and value providers
499503 /// </summary>
@@ -513,8 +517,11 @@ private static string SerializeValue(object value, PropertyInfo propertyInfo = n
513517 return provider . GetDisplayValue ( propertyInfo , value ) ;
514518 }
515519 }
516-
517- return value . ToString ( ) ;
520+ if ( IsSimpleType ( value . GetType ( ) ) )
521+ {
522+ return value . ToString ( ) ;
523+ }
524+ return JsonConverter . Serialize ( value ) ;
518525 }
519526
520527 /// <summary>
0 commit comments