private static bool AssertFields(FieldInfo[] obj1Fields, object obj1, FieldInfo[] obj2Fields, object obj2)
 {
     foreach (var field in obj1Fields)
     {
         if (!obj2Fields.Contains(field)) return false;
         if ((field.FieldType.IsValueType || field.FieldType.IsAssignableFrom(typeof(Nullable)))&& Object.Equals(field.GetValue(obj1), field.GetValue(obj2)))
         {
             continue;
         }
         if (field.FieldType == typeof(string) && string.Equals(field.GetValue(obj1), field.GetValue(obj2)))
         {
             continue;
         }
         if (field.FieldType.IsClass && DeepEqual(field.GetValue(obj1), field.GetValue(obj2)))
         {
             continue;
         }
         return false;
     }
     return true;
 }