簡體   English   中英

使用Gson反序列化為模板化類

[英]Deserializing to a templated class with Gson

我有一個帶有嵌套子類的類

public class OuterClass {
class GenericClassHolder<R> {
    @SerializedName("results")
    List<R> results;

    public GenericClassHolder() {}

    public List<R> getResults() {
        return results;
    }
}

class ExampleClassA {
    @SerializedName("A")
    int a;

    public ExampleClassA() {}

    public int getA() {return a;}
}


class ExampleClassB {
    @SerializedName("B")
    String b;

    public ExampleClassA() {}

    public String getB() {return b;}
}
}

目前,我希望能夠擁有一個函數,該函數將所保存的類作為參數,並返回適當的GenericClassHolder實例,即類似於我當前的代碼:

GenericClassHolder<ExampleClassA> genericA = parseJson(jsonString, ExampleClassA.class);

<T> GenericClassHolder<T> parseJson(final String jsonString, Class<T> variableClass) throws JsonSyntaxException {
    return GSON.fromJson(jsonString, new TypeToken<GenericClassHolder<T>>(){}.getType());
}

但這在我當前的實現中不起作用,出現錯誤

無法為GenericClassHolder<T>調用no-args構造函數。 使用此類型向Gson注冊InstanceCreator可能會解決此問題。

我如何簡潔地實現我的上述目標,即擁有一個功能,該功能將可能更改的類的規范作為輸入並相應地解析到該對象? 如果無法通過一種功能來實現優雅的解決方案,那么如果沒有一個功能,我怎么能實現這一目標呢?

我在Google Appengine實例中部署了此代碼,由於安全原因,我無法反序列化反序列化的方式,並且無法在本地計算機上以相同的方式進行復制。 解決的辦法是使反序列化的類成為靜態的。 它們也嵌套在外部封裝類中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM