From 10573cd6947b3a1c3db7323a4225a43b015d35b0 Mon Sep 17 00:00:00 2001 From: hailaz <739476267@qq.com> Date: Wed, 1 Nov 2023 17:30:52 +0800 Subject: [PATCH] fix: doMapConvertForMapOrStructValue Struct Marshaler --- util/gconv/gconv_map.go | 4 ++++ util/gconv/gconv_z_unit_map_test.go | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/util/gconv/gconv_map.go b/util/gconv/gconv_map.go index 6a74664e1..5ff18ea31 100644 --- a/util/gconv/gconv_map.go +++ b/util/gconv/gconv_map.go @@ -289,6 +289,10 @@ func doMapConvertForMapOrStructValue(in doMapConvertForMapOrStructValueInput) in case reflect.Struct: var dataMap = make(map[string]interface{}) + if _, ok := reflectValue.Interface().(Marshaler); ok { + dataMap[reflectValue.Type().Name()] = reflectValue.Interface() + return dataMap + } // Map converting interface check. if v, ok := in.Value.(iMapStrAny); ok { // Value copy, in case of concurrent safety. diff --git a/util/gconv/gconv_z_unit_map_test.go b/util/gconv/gconv_z_unit_map_test.go index 376a133e3..7c3940769 100644 --- a/util/gconv/gconv_z_unit_map_test.go +++ b/util/gconv/gconv_z_unit_map_test.go @@ -632,6 +632,15 @@ func (i Issue3108String) MarshalJSON() ([]byte, error) { } func Test_Issue3108(t *testing.T) { + gtest.C(t, func(t *gtest.T) { + obj := &Issue3108String{Name: "test"} + + converted := gconv.MapDeep(obj) + jsonData, err := json.Marshal(converted) + + t.AssertNil(err) + t.Assert(string(jsonData), `{"Issue3108String":"[test]"}`) + }) gtest.C(t, func(t *gtest.T) { type Issue3108 struct { MyName Issue3108String `json:"my_name"`