2012-05-08 47 views
0

我有實現這些的簡化接口擴張我的服務器端Java對象:如何使用JavaScript Overlay反序列化列表列表的JSON表示?

interface Vector { 
    public double getX(); 
    public double getY(); 
} 

interface Geometry { 
    public List<Vector> getShell();//can get big 
    public List<List<Vector>> getHoles(); 
} 

interface Feature { 
    public String getID(); 
    public List<Geometry> getGeometry(); 
} 

我構建的,我轉換爲使用GSON LIB到JSON的功能列表。結果看起來像這樣,除了它更大。

[{ 「i」 的: 「304」, 「G」:[{ 「S」:[{ 「×」: - 3169996.4370428286, 「Y」:1.1231962684336938E7},{ 「×」: - 3287403.71248886 , 「Y」:1.1192826925854929E7},{ 「X」: - 2935181.88615077, 「Y」:1.115369116737292E7} ....

我能夠給JSON解析成一個JsArray其中JsFeature是javascriptobject是實現功能界面。

如何獲取其餘數據,而無需通過矢量解析我的json矢量。理想情況下,我想有一種方法來將List轉換爲JsList,其中JsGeometry是一個實現Geometry的JavascriptObject類,它將包含List等等。

回答

1

您可以實現一個List類,該委託類到底層JsArray,但這並不像聽起來那麼容易(以及爲什麼它不是內置的GWT)。

我寧願推薦使用AutoBean

interface Factory extends AutoBeanFactory { 
    AutoBean<Feature> feature(); 
} 

Factory factory = GWT.create(Factory.class); 

Feature feature = AutoBeanCodex.decode(factory, Feature.class, jsonString).as(); 

運行時開銷很小,幾乎相同的List包裝一JsArray但你沒有任何代碼,使其工作。

另請注意,您甚至可以在服務器端使用AutoBean而不是GSON。

+0

我是否可以通過'AutoBean'獲得底層List 要素類? – giscope

+0

絕對!你不需要改變任何接口,只需使用AutoBeanFactory和AutoBeanCodex即可完成。 –

+0

好的,我會給它一個鏡頭 – giscope