no message
parent
62fb8c540c
commit
3a49c9f4c9
|
@ -0,0 +1,32 @@
|
|||
package test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
type Sub struct {
|
||||
A string `xml:"a"`
|
||||
}
|
||||
type Test struct {
|
||||
A int32 `json:"a" xml:"a"`
|
||||
B bool `json:"b" xml:"b"`
|
||||
C string `json:"c" xml:"c"`
|
||||
D Sub `xml:"sub"`
|
||||
}
|
||||
|
||||
func TestXml(t *testing.T) {
|
||||
// x := map[string]interface{}{}
|
||||
// x["map"] = 1
|
||||
// x["ss"] = 2
|
||||
// test := Test{A: 1, B: false, C: "hell", D: Sub{A: "aa"}}
|
||||
// bytes, e := xml.Marshal(&test)
|
||||
// if nil != e {
|
||||
// t.Error(e.Error())
|
||||
|
||||
// }
|
||||
// bytes, e = xml.Marshal(&x)
|
||||
// if nil != e {
|
||||
// t.Error(e.Error())
|
||||
|
||||
// }
|
||||
}
|
|
@ -131,6 +131,35 @@ func SameKind(typ1 reflect.Kind,typ2 reflect.Kind) bool{
|
|||
return false
|
||||
}
|
||||
|
||||
func UnmarshalWithTag(value interface{}, maps map[string]interface{},tag string){
|
||||
if "" == tag{
|
||||
return
|
||||
}
|
||||
valueof := reflect.ValueOf(value)
|
||||
if !valueof.Elem().CanAddr(){
|
||||
log.Print("should be addr")
|
||||
return
|
||||
}
|
||||
remap := ReflectTagMap(valueof.Elem().Type())
|
||||
_,ok := remap[tag]
|
||||
if !ok{
|
||||
return
|
||||
}
|
||||
for k,v := range(maps){
|
||||
log.Print(k)
|
||||
if filedName,ok := remap["json"][k];ok{
|
||||
log.Print(valueof.Elem().FieldByName(filedName).Kind(),reflect.TypeOf(v).Kind().String())
|
||||
if SameKind(valueof.Elem().FieldByName(filedName).Kind(),reflect.TypeOf(v).Kind()){
|
||||
if(valueof.Elem().FieldByName(filedName).CanSet()){
|
||||
valueof.Elem().FieldByName(filedName).Set(reflect.ValueOf(v).Convert(valueof.Elem().FieldByName(filedName).Type()))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
func UnmarshalJson(value interface{}, maps map[string]interface{}){
|
||||
valueof := reflect.ValueOf(value)
|
||||
if !valueof.Elem().CanAddr(){
|
||||
|
|
Loading…
Reference in New Issue