2016-03-07 114 views
2

我有一个请求类如何使用Gson将json字符串转换为已知类型的数组?

class Request{ 
    String serviceName ; 
    String methodName; 
    Serializable[] arguments; 
} 

这表示在服务器上执行的具体方法的请求。

参数是随机完全可以serilizable的对象的数组。

现在我把它序列化使用

Request req = new Request("serviceName" , "methodName" , Serializable...) 
// all arguments are specified through the elipsis and stored in the arguments array 
Gson gson = new Gson() ; 

gson.toJson(request) ; 

现在我尝试反序列化 - 的问题是显而易见的,因为GSON不知道类型的数组中的每个元素。

所以反序列化我有一个

Class<?>[] argTypes = new Class<?>[equalNumberToArguments]() ; 
// This type array is filled with types that I know match the arguments array in request. 

现在我有一个自定义解串器

class RequestDeserializer implements JsonDeserializer<Request> { 

     Class<?>[] paramTypes = null ; 

     // The types matching the arguments array are specified through the   constructor here. 
     RequestDeserializer(Class<?>[] types){ 
      paramTypes = types ; 
     } 

     @Override 
     public Request deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) 
       throws JsonParseException { 

      final JsonObject jsonObject = json.getAsJsonObject(); 

      String s = jsonObject.get("serviceName").getAsString(); 
      String m = jsonObject.get("methodName").getAsString(); 
      JsonElement element = jsonObject.get("arguments") ; 

      if (element.isJsonArray()){ 
       JsonArray array = element.getAsJsonArray() ; 

       // - how do I implement retrieval of each json object from 
       array here ? 
      } 

      return null; 
     } 

    } 

回答

0

下面是解我使用

class RequestDeserializer implements JsonDeserializer<Request> { 

    JsonElement element = null ; 
    JsonElement argumentJson = null ; 
    Class<?> types = null ; 

    public RequestDeserializer(Class<?> tps){ 
     types = tps ; 
    } 

    public Object[] getArguments(){ 

     if (types.length == 0) 
      return null ; 

     Object[] arguments = new Object[types.length] ; 

     if (argumentJson != null && argumentJson.isJsonArray()){ 

      JsonArray array = argumentJson.getAsJsonArray() ; 

      for (int i=0 ; i < types.length ; i++){ 

       JsonElement arrayEle = array.get(i) ; 

       Gson gson = new Gson() ; 

       arguments[i] = gson.fromJson(arrayEle, types[i]) ; 
      } 
     } 
     return arguments; 
    } 
} 
相关问题