日期:2014-05-16  浏览次数:20354 次

JsonConvert 0.2.0正式版 发布~

? ?--

? ? ? 时隔大半年才有自己业余的时间对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]);
	}
});

? ? ? 刚开始准