2016-11-11 284 views
1

說我有一個對象,我將它的所有屬性都存儲爲純JSON。有沒有一種方法來存儲.getClass()值,以便能夠檢索它並獲取原始對象?將字符串值轉換爲類型

例:

class foo 
{ 
int test; 
String classType; 
} 


//other class 
foo demo = new foo(); 
demo.classType = demo.getClass().toString(); 


//I'm not entirely sure how to convert classType into a type I can use to parse back the data, like so: 
foo demo2 = (demo.classType)jsonData; 

由於這可能是一個有點寬泛的問題,我會接受的答案,只是告訴我上面有哪些是所謂的(如果你將一個搜索詞)。

+1

你只是試圖在進程之間/網絡之間傳遞一個對象?你有沒有考慮過使一個對象可序列化? – dahui

+0

它作爲響應對象的一部分(作爲有效載荷)傳遞,所以我不認爲我可以使用可序列化。 – Gabrielus

+0

使用'Serializable'作爲有效載荷並沒有什麼本質的錯誤(儘管它有很多痛苦點使它不受歡迎)。 [協議緩衝區](https://developers.google.com/protocol-buffers/)是Google解決此問題的解決方案,如果您有[Gson](https://github.com/google/gson)是另一個有用的工具需要堅持使用JSON。 – dimo414

回答

1

轉換Java對象到JSON

ObjectMapper mapper = new ObjectMapper(); 
Staff obj = new Staff(); 

//Object to JSON in file 
mapper.writeValue(new File("c:\\file.json"), obj); 

//Object to JSON in String 
String jsonInString = mapper.writeValueAsString(obj); 

轉換JSON到Java對象

ObjectMapper mapper = new ObjectMapper(); 
String jsonInString = "{'name' : 'mkyong'}"; 

//JSON from file to Object 
Staff obj = mapper.readValue(new File("c:\\file.json"), Staff.class); 

//JSON from URL to Object 
Staff obj = mapper.readValue(new URL("http://mkyong.com/api/staff.json"), Staff.class); 

//JSON from String to Object 
Staff obj = mapper.readValue(jsonInString, Staff.class); 
2

您可以使用instanceof操作員創建並投射新創建的對象至foo

foo demo = new foo(); 
    demo.classType = demo.getClass().toString(); 

    foo demo2 = null; 
    OtherClass demo3 = null; 

     Class<?> clas=Class.forName(demo.getClass().getName()); 
     Object obj= clas.newInstance(); 
     if (obj instanceof foo) { 
      demo2=(foo)obj; 
     }else if (obj instanceof OtherClass) { 
      demo3=(OtherClass)obj; 
     }   

注:確保如果您使用多個else,如果再分等級後在上面,超類添加子類狀態,是的,你需要添加try-catch塊太

+0

有很多類,我會有許多if子句全部做類似的事情 - 這意味着demo3 =(OtherClass)obj;有沒有辦法進一步簡化?例如:clas demo2 =(clas)obj; – Gabrielus

+0

要使用某些類的特定功能,您必須使用向下轉換。你可以直接使用外殼,但是'if'條件可以覆蓋不確定性,因爲我們只是說'clas.newInstance()'返回一個'bar'並且'foo demo2 =(foo)obj'是一個錯誤,而另一個方法將會使用越來越多的反射來查找和調用'foo'類的所有方法 –

相關問題