想象一下Java對象的樹,即某個類的頂級對象,它包含一些屬性,而這些屬性又是其他類的對象,等等,直到我們基本達到基本類型,如整數或字符串,等等。例如:將Java對象的樹序列化到自定義XML中
class Car {
private Door _leftDoor;
private Door _rightDoor;
}
class Door {
private String _name;
}
通過序列化Car
類的頂級對象,我希望看到一個XML文檔,例如,像這樣:
<object type="Car">
<property type="Door" identifier="_leftDoor">
<object type="Door">
<property type="String" identifier="_name">I am a left door!</property>
</object>
</property>
<property type="Door" identifier="_rightDoor">
<object type="Door">
<property type="String" identifier="_name">I am a right door!</property>
</object>
</property>
</object>
順便說一句,請注意這個片段可能會如何例如,如果Car
對象將是某個其他父對象的屬性。
我的問題是:這將是實現這一圖案方式,structurewise,designwise,architecturewise的正確方法?我認爲我的問題需要澄清。實現這一點,在我腦海的第一個和簡單的方法是類似於Java的常規toString
東西:
class Car {
...
public Element toElement(Element element) {
Document document = element.getOwnerDocument();
Attr attr;
Element objectElement = document.createElement("object");
element.appendChild(objectElement);
attr = document.createAttribute("type");
attr.setValue(class.getSimpleName());
objectElement.setAttributeNode(attr);
Element propertyElement;
propertyElement = document.createElement("property");
objectElement.appendChild(propertyElement);
attr = document.createAttribute("type");
attr.setValue(_leftDoor.getClass().getSimpleName());
propertyElement.setAttributeNode(attr);
attr = document.createAttribute("identifier");
attr.setValue("_leftDoor");
propertyElement.setAttributeNode(attr);
_leftDoor.toElement(propertyElement);
propertyElement = document.createElement("property");
objectElement.appendChild(propertyElement);
attr = document.createAttribute("type");
attr.setValue(_rightDoor.getClass().getSimpleName());
propertyElement.setAttributeNode(attr);
attr = document.createAttribute("identifier");
attr.setValue("_rightDoor");
propertyElement.setAttributeNode(attr);
_rightDoor.toElement(propertyElement);
return objectElement;
}
}
class Door {
...
public Element toElement(Element element) {
...
}
}
有多好,這種想法在加入這種XML序列化的直接對應類的方法的意義嗎?是不是很好,我已經限制它有Element
作爲參數(儘管由於Java XML API的設計方式,我不得不這樣做)?我回來Element
好嗎?你有什麼想法可以從這個實現的架構角度改進嗎?任何建議是受歡迎的。
我知道java.beans.XMLEncoder
設施,但這是Java特定的XML序列化程序,在這種情況下對我來說是多餘的。
XStream確實是一個非常有趣的軟件,純粹是通用的XML編組/解組。我還發現JAXB現在與Java SE捆綁在一起,是另一種可以做同樣的選擇,甚至更多! ** [如何將JAXB與XStream進行比較?](http://blog.bdoughan.com/2010/10/how-does-jaxb-compare-to-xstream.html)**文章特別好解釋。我想我能夠以某種方式將這種方法適應於我想達到的目的,因爲無論如何我都不是車輪改造者。所以謝謝你指出,我知道有人已經比我做得好多了。 –