x.x.jar 包)。别名机制与前面的情况是一样的。仍然用 toXML() 方法,没有 toJSON() 方法,统一了接口方法以,用起来却让人有些费解。
看输出:
01.{"customer": {
02. "custId": 1,
03. "custName": "Unmi",
04. "orders": [
05. {
06. "orderId": 101,
07. "orderName": "电器类",
08. "products": [
09. {
10. "prodId": 1001,
11. "prodName": "电脑",
12. "prodPrice": 4000.0
13. },
14. {
15. "prodId": 1002,
16. "prodName": "空调",
17. "prodPrice": 2000.0
18. }
19. ]
20. }
21. ]
22.}}
如果使用的是 JettisonMappedXmlDriver,你会看到输出的内容全在一行。
前面用于演示 JavaBean 到 XML/JSON 的转换的例子,还稍显复杂,涉及到了 List 和数组类型。其实 XStream 是通过反射来获取属性的,即使是私有的,而不依赖于 getter 方法,这点上比JSON-lib 要强。XStream 使用了像 JDBC Driver 的模式,通过更换 Driver 的方式来达成不同的内部实现。和 DWR/Struts 一样,它也是用 Converter 来做到数据类型的转换。
3. XML -> JavaBean
01.public static void main(String[] args) {
02.
03. XStream xstream = new XStream(new DomDriver());
04.
05. //设置了这个别名才能识别下面 xml 中的 product 节点,否则要用类全限名称
06. xstream.alias("product", Product.class);
07. String xml = "<product><prodId>1001</prodId><prodName>电脑" +
08. "</prodName><prodPrice>4000.0</prodPrice></product>";
09. Product prod = (Product)xstream.fromXML(xml);
10. System.out.println(prod.getProdName());
11.}
使用XStream在JavaBean与XML/JSON之间相互转换(4)
时间:2011-01-16 BlogJava 隔叶黄莺
执行上面的程序,能够输出产品名称“电脑”来,说明,由 XML 描述创建对象是成功的。相对于生成 XML 用的是 toXML(),通过 XML 构建对象用的方法是 fromXML(),同样要留意它的其他重载方法:
Object fromXML(InputStream input);
Object fromXML(InputStream xml, Object root);
Object fromXML(Reader xml);
Object fromXML(Reader xml, Object root);
Object fromXML(String xml);
Object fromXML(String xml, Object root);
它们能从不同的输入源,可指定根节点来构建对象。
4. JSON -> JavaBean
01.public static void main(String[] args) {
02. // 这里不能用 JsonHierarchicalStreamDriver 了,它只能用于 JavaBean->JSON
03. XStream xstream = new XStream(new JettisonMappedXmlDriver());
04.
05. // 设置了这个别名才能识别下面 xml 中的 product 节点,否则要用类全限名称
06. xstream.alias("product", Product.class);
07. String json = "{product:{prodId: 1001,prodName: ''电脑'', prodPrice: 4000.0}}";
08.
|