我想反序列化兩種類型的JSON:提供了傑克遜映射多種方式來反序列化同一對象
{
name: "bob",
worksAt: {
name: "Bobs department store",
location: "downtown"
},
age: 46
}
和
{
name: "Tom",
worksAt: "company:Bobs department store",
age: 27
}
到這些對象:
第一種方式創建兩個新對象,第二種方式請求對象從t他數據庫基於一個字符串的內容。
有點像傑克遜映射器如何反序列化將任意字符串的對象,這樣的對象:
public class Company{
public String name;
public Employee[] employees
public Company(){}
public Company(String json){
//turn string into object using whatever encoding you want blah blah blah...
}
}
麻煩的是我需要兩者。我需要它來處理對象和字符串。兩者都可以從相同的輸入中得到。
我嘗試的第一個想到的就是製作轉換
它說,這些創建一個委託類型傳遞給解串器,但轉換器始終應用於即使數據類型不是字符串。所以這沒有奏效。
我也試過一個正常的反序列化器,但是我找不到推遲到BeanDeserializer的方法。 beanDeserializer非常複雜,我無法手動實例化它。我也看不到在傑克遜映射器中默認的反序列化器。
我是否必須重新實現傑克遜映射器反序列化才能做到這一點?反序列化器是否有任何方式說「我不能這樣做,使用默認實現」?
編輯:一些進一步的進展。基於傑克遜映射器的源代碼,它看起來像你可以instatiate豆解串器是這樣的:
DeserializationConfig config = ctxt.getConfig();
JavaType type = config.constructType(_valueClass);
BeanDescription introspect = config.introspect(type);
JsonDeserializer<Object> beanDeserializer = ctxt.getFactory().createBeanDeserializer(ctxt, type , introspect);
,但由於某種原因,所有的_beanProperties有FailingDeserializer組爲他們_valueDeserializer整個事情失敗。所以,我不知道爲什麼出現這種情況?
是的。事實上,我確實試圖實現一個自定義的解串器。但是我撞到了一堵牆。它將允許我從一個字符串反序列化一個對象,但是如果傳入一個json對象會發生什麼?手動反序列化系統中的許多嵌套對象是不行的。我需要使用bean解串器來完成它。但是,一旦我爲一個對象定義了反序列化器,我就無法再訪問bean解串器了! – Ghoughpteighbteau