日期:2014-05-16 浏览次数:20354 次
? ?--
? ? ? 时隔大半年才有自己业余的时间对JsonConvert进行了一次大更新。
? ? ? 更新内容:
? ? ? ? ???1、结构上进行大量的重构
? ? ? ? ? ?2、支持更全面的泛型解析
? ? ? ? ? ?3、支持json部分对象提取
? ? ? ? ? ?4、支持非空构造函数的类
? ? ? ? ? ?5、增加字段的具体类型配置
? ? ? ? ? ?6、增加功能但代码反而减少40%
?
? ? ? ??JsonConvert默认只提供支持最基本的类型:
? ? ? ? ? ? ? ? boolean--double、enum、Boolean--Double、String、以上类型的数组
?
?
下面介绍JsonConvert的使用方法:
? ? ? 一、常用方法:
public static class Record { public int id; public String name; public Record(){} } //--------------------------序列化对象--------------------- Record record = ...; String json = JsonConvert.convertTo(record); //通常序列化后需要io操作, 所以提供了一个bytes方法调用 byte[] bytes = JsonConvert.convertToUTF8Bytes(record); //--------------------------解析对象--------------------- //解析单个对象使用convertFrom方法, 数组则使用convertArrayFrom record = JsonConvert.convertFrom(json, Record.class); //------------------------解析部分json-------------------- String str = "{id:18,data:{name:'haha',info:{qq:10001,birth:[1988,8,8]}}}"; int[] birth = JsonConvert.convertFrom(str, "data.info.birth", int[].class);?
?
? ?解析时默认情况下Record的实例化是通过DefaultCreator进行创建的, 而DefaultCreator使用的是反射。
所以如果注重这点反射性能的话可以给Record注册一个Creator:
?
JsonFactory.register(Record.class, new Creator<Record>() { public Record create(Object... params) { return new Record(); } });?
? 注意: 所有JsonFactory.register的方法必须在第一次使用JsonConvert之前调用。
? ? ? 二、无默认构造类:
? ? ? ?通常JavaBean都会有个public无参数的构造函数, 但是如果有特殊情况或者JavaBean是第三方提供的。
在解析之前就必须给这个类注册一个带有@CreatorFields的Creator:
public static class Record { public final int id; public String name; public long qq; public Record(int id, String name) { this.id = id; this.name = name; } } JsonFactory.register(Record.class, new Creator<Record>() { @CreatorFields({"id", "name"}) public Record create(Object... params) { int id = params[0] == null ? 0 : (Integer) params[0]; return new Record(id, (String) params[1]); } });
? ? ? 刚开始准