|
|
@@ -63,12 +63,20 @@ func assignTo(fromElemValue reflect.Value, retElemValue *reflect.Value) error {
|
|
|
for i := 0; i < fromElemValue.NumField(); i++ {
|
|
|
fromField := fromElemValue.Type().Field(i)
|
|
|
tagStr := fromField.Tag.Get(assignTagKey)
|
|
|
+
|
|
|
+ // 结构上没有添加Tag, 先尝试直接按照字段赋值结构,如果失败,进一步进入内部尝试
|
|
|
if strutils.IsStringEmpty(tagStr) &&
|
|
|
- (fromField.Type.Kind() == reflect.Struct ||
|
|
|
- (fromField.Type.Kind() == reflect.Ptr && fromField.Type.Elem().Kind() == reflect.Struct)) {
|
|
|
+ ((fromField.Type.Kind() == reflect.Struct && fromField.Type.String() != "time.Time") ||
|
|
|
+ (fromField.Type.Kind() == reflect.Ptr &&
|
|
|
+ fromField.Type.Elem().Kind() == reflect.Struct &&
|
|
|
+ fromField.Type.Elem().String() != "time.Time")) {
|
|
|
fromStructElemValue := fromElemValue.Field(i)
|
|
|
if fromField.Type.Kind() == reflect.Ptr {
|
|
|
- fromStructElemValue = fromElemValue.Elem()
|
|
|
+ if !fromStructElemValue.IsValid() || fromStructElemValue.IsZero() {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ fromStructElemValue = fromStructElemValue.Elem()
|
|
|
}
|
|
|
|
|
|
err := assignTo(fromStructElemValue, retElemValue)
|
|
|
@@ -145,7 +153,7 @@ func assignField(fromFieldElemValue reflect.Value, retFieldElemValue reflect.Val
|
|
|
break
|
|
|
}
|
|
|
|
|
|
- if retKind == reflect.Struct {
|
|
|
+ if fromFieldElemValue.Type().String() != "time.Time" && retKind == reflect.Struct {
|
|
|
return assignTo(fromFieldElemValue, &retFieldElemValue)
|
|
|
}
|
|
|
|