2017-05-03 3 views
0

나는 map [string] 인터페이스 {}를 만들었고 두 개의 리셋 서비스 사이에서 맵을 통해 여러 유형을 전달하려고합니다.마샬/unMarshal reflect.Type

내가 마샬링 할 때마다 나는 reflect.Type을 포함해야하는 필드에서 빈 맵을 얻습니다.

ServiceType:map[] 

도 가능합니까? 테스트를 위해

코드 :합니다 (KeyValuePair지도의 단일 값을 나타냅니다)과이고 MessageService 물론

data := GenericHandlers.KeyValuePair{Key:"ServiceType",Value:reflect.TypeOf(MessageService.MessageService{})} 
Json , _ := json.Marshal(data) 
resKvp := GenericHandlers.KeyValuePair{} 
err := json.Unmarshal(Json,&resKvp) 
if(err != nil){ 
    log.Println(err.Error()) 
} 
fmt.Println(resKvp) 


type KeyValuePair struct{ 
     Key string 
     Value interface{} 
} 

답변

1

짧은 대답 모든 종류의로 대체 할 수있다 : 아니, 그것은 불가능합니다.

약간 더 이상 답변 : TypeOf에 의해 반환 relfect.Type 때문에,의 안 export 유형 rtype에 의해 구현 된 인터페이스 유형이며, 그 필드에 수출하고 그 방법을 설정 MarshalJSON/UnmarshalJSON 방법을 포함하지 않는 아무도, 당신은 할 수 없습니다값을 마샬 (marshal) 또는 비 정렬 화 (unmarshal)합니다.