@@ -2,12 +2,13 @@ package jsoniter
22
33import (
44 "fmt"
5- "github.com/modern-go/reflect2"
65 "reflect"
76 "sort"
87 "strings"
98 "unicode"
109 "unsafe"
10+
11+ "github.com/modern-go/reflect2"
1112)
1213
1314var typeDecoders = map [string ]ValDecoder {}
@@ -448,12 +449,22 @@ func processTags(structDescriptor *StructDescriptor, cfg *frozenConfig) {
448449 if tagPart == "omitempty" {
449450 shouldOmitEmpty = true
450451 } else if tagPart == "string" {
451- if binding .Field .Type ().Kind () == reflect .String {
452- binding .Decoder = & stringModeStringDecoder {binding .Decoder , cfg }
453- binding .Encoder = & stringModeStringEncoder {binding .Encoder , cfg }
454- } else {
452+ fieldType := binding .Field .Type ()
453+ isPointer := false
454+ if fieldType .Kind () == reflect .Pointer {
455+ isPointer = true
456+ fieldType = reflect2 .Type2 (fieldType .Type1 ().Elem ())
457+ }
458+ switch fieldType .Kind () {
459+ case reflect .String :
460+ binding .Decoder = & stringModeStringDecoder {isPointer , binding .Decoder , cfg }
461+ binding .Encoder = & stringModeStringEncoder {isPointer , binding .Encoder , cfg }
462+ case reflect .Float32 , reflect .Float64 ,
463+ reflect .Int , reflect .Int8 , reflect .Int16 , reflect .Int32 , reflect .Int64 ,
464+ reflect .Uint , reflect .Uint8 , reflect .Uint16 , reflect .Uint32 , reflect .Uint64 , reflect .Uintptr ,
465+ reflect .Bool :
455466 binding .Decoder = & stringModeNumberDecoder {binding .Decoder }
456- binding .Encoder = & stringModeNumberEncoder {binding .Encoder }
467+ binding .Encoder = & stringModeNumberEncoder {isPointer , binding .Encoder }
457468 }
458469 }
459470 }
0 commit comments