test: add json serialize test
diff --git a/config_example/sys.config b/config_example/sys.config
index f33d74a..9bcc553 100644
--- a/config_example/sys.config
+++ b/config_example/sys.config
@@ -20,7 +20,7 @@
         {zookeeper_list,[{"127.0.0.1",2181}]},
         {application,<<"testdubboerl">>},
         {registry,true},
-        {protocol,hessian},
+        {protocol,json},
         {port,20881},
         {consumer,[
             {<<"com.ifcoder.demo.facade.User">>,[]}
diff --git a/src/dubbo_type_transfer.erl b/src/dubbo_type_transfer.erl
index 6c7c727..27db68b 100644
--- a/src/dubbo_type_transfer.erl
+++ b/src/dubbo_type_transfer.erl
@@ -13,7 +13,7 @@
 -include("dubbo.hrl").
 
 %% API
--export([java_to_native/2,pre_process_typedef/3,response_to_native/1,classobj_to_native/2]).
+-export([java_to_native/2,pre_process_typedef/3,response_to_native/1,classobj_to_native/2,jsonobj_to_native/3]).
 
 
 response_to_native(Response)->
@@ -66,4 +66,28 @@
 %%            Type2=type_decoding:hash_store(Type),
     type_register:regiest_foreign_native(Type),
     logger:debug("pre_process_typedef ~p,~p",[NativeType,ForeignType]),
-    ok.
\ No newline at end of file
+    ok.
+
+
+jsonobj_to_native(Type,JsonObj,State)->
+    ClassName = java_desc_name_to_dot(Type),
+    %% todo need recursion transfer
+    case type_register:lookup_foreign_type(ClassName) of
+        undefined ->
+            JsonObj;
+        #type_def{fieldnames = Fields,native_type = NativeType} ->
+            logger:debug("jsonobj_to_native ~p ~p ~p",[ClassName,Fields,JsonObj]),
+            NativeData = [ maps:get(atom_to_binary(Key,utf8),JsonObj,undefined) || Key <- Fields],
+            list_to_tuple( [NativeType] ++ NativeData)
+    end.
+
+
+
+java_desc_name_to_dot(DescName) ->
+    case DescName of
+        <<$L,ClassName/binary>> ->
+            binary:replace(ClassName,<<"/">>,<<".">>,[global]);
+        _ ->
+            DescName
+    end.
+
diff --git a/test/dubbo_service_user_impl.erl b/test/dubbo_service_user_impl.erl
index eba5bb6..417e3fa 100644
--- a/test/dubbo_service_user_impl.erl
+++ b/test/dubbo_service_user_impl.erl
@@ -15,7 +15,7 @@
 -include_lib("dubboerl/include/hessian.hrl").
 -include_lib("dubboerl/include/dubbo.hrl").
 %% API
--export([getUserInfo/1,queryUserList/1,genUserId/0]).
+-export([getUserInfo/1,queryUserList/1,genUserId/0,queryUserInfo/1]).
 
 genUserId()->
   "newid".
@@ -31,4 +31,9 @@
   Res = #userRes{
     userlist = List
   },
-  Res.
\ No newline at end of file
+  Res.
+
+
+queryUserInfo(Arg0)->
+  io:format(user,"do invoker queryUserInfo ~p",[Arg0]),
+  #userInfo{userName = "uuname",userAge = 10,userId = "44"}.
\ No newline at end of file
diff --git a/test/user2.erl b/test/user2.erl
index 8112d8c..3b406e1 100644
--- a/test/user2.erl
+++ b/test/user2.erl
@@ -9,7 +9,7 @@
 -include("dubbo_service.hrl").
 
 
-
+-export([test/0]).
 
 %% API
 -export([
@@ -160,3 +160,6 @@
     Request = dubbo_adapter:reference(Data),
     dubbo_invoker:invoke_request(?CURRENT_CLASS_NAME,Request,RequestOption).
 
+
+test()->
+    queryUserInfo(#userInfoRequest{username = "name",requestId = "111"},#{sync=> true}).
\ No newline at end of file