diff --git a/filter/filter_impl/generic_filter.go b/filter/filter_impl/generic_filter.go
index 7d7a54fd1c48e2e4272e3541474f6449c3912ece..e38a78499cdf779d6a891ced515adf798a33e2a8 100644
--- a/filter/filter_impl/generic_filter.go
+++ b/filter/filter_impl/generic_filter.go
@@ -93,23 +93,20 @@ func struct2MapAll(obj interface{}) interface{} {
 	if t.Kind() == reflect.Struct {
 		result := make(map[string]interface{}, t.NumField())
 		for i := 0; i < t.NumField(); i++ {
-			switch v.Field(i).Kind() {
-			case reflect.Struct:
-				fallthrough
-			case reflect.Slice:
-				fallthrough
-			case reflect.Map:
-				if v.Field(i).CanInterface() {
-					if v.Field(i).Type().String() == "time.Time" {
-						setInMap(result, t.Field(i), v.Field(i).Interface())
+			field := t.Field(i)
+			value := v.Field(i)
+			kind := value.Kind()
+			if kind == reflect.Struct || kind == reflect.Slice || kind == reflect.Map {
+				if value.CanInterface() {
+					if value.Type().String() == "time.Time" {
+						setInMap(result, field, value.Interface())
 						break
 					}
-					setInMap(result, t.Field(i), struct2MapAll(v.Field(i).Interface()))
+					setInMap(result, field, struct2MapAll(value.Interface()))
 				}
-				break
-			default:
-				if v.Field(i).CanInterface() {
-					setInMap(result, t.Field(i), v.Field(i).Interface())
+			} else {
+				if value.CanInterface() {
+					setInMap(result, field, value.Interface())
 				}
 			}
 		}