2016-09-30 23 views
1

使原生動物像標準的Jackson序列化程序一樣行爲的最簡單方法是什麼?原生動物書寫列表爲JSON

我想能夠序列化對象圖形,列表或數組作爲根對象,但似乎甚至沒有解決這個問題的方法?

這裏— o是對象,可以是字符串,SOMETYPE,列表[T]等...

JsonIOUtil.writeTo(stream, 
        o, 
        RuntimeSchema.getSchema((Class<Object>) o.getClass()), 
        false, 
        LinkedBuffer.allocate()); 

回答

0

JSON不是主要的序列化型,由protostuff支撐。 最初創建它是爲了支持protobuf,帶有一些擴展(對象圖)。 JSON序列化稍後添加,作爲「受支持」的序列化格式。這就是爲什麼幾乎沒有什麼限制,在傑克遜JSON或GSON等通用JSON支持庫中不存在的限制。

原生序列可以序列化/反序列化「消息」,這是一個具有一組鍵值對的字段的抽象結構。字段可以是原始的(整數,字符串等),其他消息或數組。但是沒有辦法直接序列化數組 - 你總是需要「一條消息」。

可以定義一個包裝類是這樣的:

class Event { 
    public Object data; 
} 

有了這個包裝類,你可以在「數據」設置爲任意類型,包括列表/陣列。

UPDATE 2016年10月4日:在protostuff

JSON序列化格式不支持循環引用。對於序列化對象圖,您必須使用GraphIOUtil,它使用它自己的二進制格式。

+0

因此,即使我使用GraphIOUtil,我也必須包裝類並執行打包/解包步驟?另外,這隻對原生lib的protostuff-graph格式有效?我想使用protostuff進行json&graph序列化,因爲我看到它在基準測試中的速度+大小比例最好(https://github.com/eishay/jvm-serializers/wiki),但似乎仍然需要使用json部分的不同(較慢)庫... –

+0

是的,你是正確的。我更新了我的答案。 – Kostiantyn