如何使用Gson将json字符串转换为已知类型的数组?

时间:2016-03-07 08:57:08

标签: java arrays json gson deserialization

我有一个Request类

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

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

参数是一组随机完全可血清化的对象。

现在我使用

序列化它
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;
        }

    }

1 个答案:

答案 0 :(得分:0)

这是我正在使用的解决方案

static int