mirror of https://github.com/goccy/go-json.git
parent
a2149a5b25
commit
06ab2b4c88
|
@ -2629,3 +2629,18 @@ func TestCustomMarshalForMapKey(t *testing.T) {
|
|||
assertErr(t, err)
|
||||
assertEq(t, "custom map key", string(expected), string(got))
|
||||
}
|
||||
|
||||
func TestIssue426(t *testing.T) {
|
||||
type I interface {
|
||||
Foo()
|
||||
}
|
||||
type A struct {
|
||||
I
|
||||
Val string
|
||||
}
|
||||
var s A
|
||||
s.Val = "456"
|
||||
|
||||
b, _ := json.Marshal(s)
|
||||
assertEq(t, "unexpected result", `{"I":null,"Val":"456"}`, string(b))
|
||||
}
|
||||
|
|
|
@ -617,6 +617,13 @@ func (c *Compiler) structCode(typ *runtime.Type, isPtr bool) (*StructCode, error
|
|||
return code, nil
|
||||
}
|
||||
|
||||
func toElemType(t *runtime.Type) *runtime.Type {
|
||||
for t.Kind() == reflect.Ptr {
|
||||
t = t.Elem()
|
||||
}
|
||||
return t
|
||||
}
|
||||
|
||||
func (c *Compiler) structFieldCode(structCode *StructCode, tag *runtime.StructTag, isPtr, isOnlyOneFirstField bool) (*StructFieldCode, error) {
|
||||
field := tag.Field
|
||||
fieldType := runtime.Type2RType(field.Type)
|
||||
|
@ -626,7 +633,7 @@ func (c *Compiler) structFieldCode(structCode *StructCode, tag *runtime.StructTa
|
|||
key: tag.Key,
|
||||
tag: tag,
|
||||
offset: field.Offset,
|
||||
isAnonymous: field.Anonymous && !tag.IsTaggedKey,
|
||||
isAnonymous: field.Anonymous && !tag.IsTaggedKey && toElemType(fieldType).Kind() == reflect.Struct,
|
||||
isTaggedKey: tag.IsTaggedKey,
|
||||
isNilableType: c.isNilableType(fieldType),
|
||||
isNilCheck: true,
|
||||
|
|
Loading…
Reference in New Issue