想象一下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)**文章特别好解释。我想我能够以某种方式将这种方法适应于我想达到的目的,因为无论如何我都不是车轮改造者。所以谢谢你指出,我知道有人已经比我做得好多了。 –