2012-06-26 67 views
0
class Result { 
    private List orders;// Holds objects of class Object only. 
    private Number a; 
    private Number b; 
} 

class Order { 
    private Number oid; 
    private Number status; 
} 

public class TestClass { 
public static void main(String... args){ 
    String testString = "{\"orders\":[{\"oid\":\"347\",\"status\":\"1\"},{\"oid\":\"348\",\"status\":\"1\"}],\"a\":14.15,\"b\":0}"; 
    Gson gson = new GsonBuilder().create(); 
    Result res = gson.fromJson(testString, Result.class); 
} 

類別結果無法修改。 Json沒有列表的類型信息,Json也無法解析。JSON反序列化Java中沒有類型信息的列表

  1. 假設我們不能改變這些類,那麼如何解決這個問題呢?考慮可以存在多個不同類型的這種列表的情況。
  2. 如果列表包含多種類型的對象,該怎麼辦?

回答

1

當解析JSon時,你期望它具有一定的結構。例如,你期望Result對象包含Orders而不是字符串或其他。所以解析器必須足夠聰明才能確定列表中可以包含哪些對象。沒有辦法知道這一點,除非你參數化你的收藏。相信所有的java泛型信息都會在編譯時被擦除。這不是真的。例如,Gson使用泛型來弄清楚如何解析特定的列表值。因此,如果您使用的是GSon解析器和List<Order>,則不同的列表類型沒有問題。

處理不同的列表項目類別是另一回事。如果您可以更改Json數據,那麼您可以爲每個列表項目編碼類名稱及其字段。如果你絕對不能改變你的數據類,你將不得不恢復將json解釋爲分層鍵 - 值對的集合,並自己進行反序列化。

可能this線程將有所幫助