diff --git a/dataset.go b/dataset.go index 45456bd..9df986c 100644 --- a/dataset.go +++ b/dataset.go @@ -167,7 +167,7 @@ func UnmarshalModelList[T any](ds *DataSet, models *[]*T) error { } /* - 目前不支持指针!!! + 只支持1级指针 */ func UnmarshalModel[T any](ds *DataSet, m *T) error { mType := reflect.TypeOf(m).Elem() @@ -202,39 +202,22 @@ func UnmarshalModel[T any](ds *DataSet, m *T) error { if gormIsJson { q5.DecodeJson(fieldVal, mVal.Field(i).Addr().Interface()) } else { - switch field.Type.Kind() { - case reflect.Bool: - { - if fieldVal == "" || fieldVal == "0" { - mVal.Field(i).SetBool(false) - } else { - mVal.Field(i).SetBool(true) + if (q5.IsSimpleReflectKind(field.Type.Kind())) { + mVal.Field(i).Set(*q5.StrToSimpleReflectValue(fieldVal, field.Type.Kind())) + } else { + switch field.Type.Kind() { + case reflect.Ptr: + { + if (q5.IsSimpleReflectKind(field.Type.Elem().Kind())) { + mVal.Field(i).Set(*q5.StrToSimplePtrReflectValue(fieldVal, field.Type.Elem().Kind())) + } else { + GetSysLog().Info("UnmarshalModel unknow fieldPtrType:%s", field.Type.Elem()); + } + } + default: + { + GetSysLog().Info("UnmarshalModel unknow fieldType:%s", field.Type.Kind()); } - } - case reflect.Int, - reflect.Int8, - reflect.Int16, - reflect.Int32, - reflect.Int64: - { - mVal.Field(i).SetInt(q5.ToInt64(fieldVal)) - } - case reflect.Uint, - reflect.Uint8, - reflect.Uint16, - reflect.Uint32, - reflect.Uint64: - { - mVal.Field(i).SetUint(uint64(q5.ToInt64(fieldVal))) - } - case reflect.Float32, - reflect.Float64: - { - mVal.Field(i).SetFloat(q5.ToFloat64(fieldVal)) - } - case reflect.String: - { - mVal.Field(i).SetString(fieldVal) } } }