`
E-Hunter
  • 浏览: 11684 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Nutz.Json支持泛型的解决方案

    博客分类:
  • Nutz
阅读更多

    Nutz.Json从整体上来讲,还是非常强大的,只需要简单的一个方法,就可以实现Json字符串与java对象之间的转换。但是在实际应用中,我们常常需要把一个泛型集合序列化成Json字符串,使用Json.toJson()还是很方便的,但是当我们要反序列化的时候,往往就不那么顺利了。因为泛型信息在编译阶段就被擦除了,缺少了泛型信息,Nutz就不知道要怎么去转换了。

    明白了问题出在哪里,我们就非常容易解决这个问题了。我们只要提供一个方法,把泛型信息作为参数传递进去,那么这个问题就解决了。先看下面的代码:

 

 

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.nutz.json.Json;
import org.nutz.lang.Lang;

public class Json4Genric {

	public static List fromJson(Class<?> T,CharSequence cs){
		List<Map> maps = (List<Map>) Json.fromJson(cs);
		List list = new ArrayList();
		for (Map map : maps) {
			Object obj = Lang.map2Object(map,T);
			list.add(obj);
		}
		return list;
	}
}

 

    在这个方法中,我们看到,传递了泛型信息T,我们先将整个Json字符串转换成一个List,Nutz的Json.fromJson()在设计时使用了TreeMap,所以我们把转换结果强制为List<Map>,这个map中的每一个元素都在接下来被转换成Object,放到我们准备好的list中返回。

    我们只要这么简单的封装一下,就有了支持泛型的Json方法了。Nutz虽然不能提供所有我们需要的功能,但是我们可以很容易的扩展出我们需要的功能,这只是非常简单的一个例子。

分享到:
评论
5 楼 E-Hunter 2011-05-09  
哦哦~原来如此~
4 楼 zozoh 2011-05-08  
其实对于范型,你可以
String s = "[{id:3,name:'a'}, {id:8,name:'x'}]";
Type type = new LinkedList<Abc>() {}.getClass().getGenericSuperclass();
List<Abc> abcs = (List<Abc>)Json.fromJson(type, s);
System.out.println(abcs.get(1).getName());

3 楼 zozoh 2011-05-08  
其实对于范型,你可以:

String s = "[{id:3,name:'a'}, {id:8,name:'x'}]";
List<Abc> abcs = (List<Abc>)Json.fromJson(new LinkedList<Abc>() {}.getClass().getGenericSuperclass(), s);
System.out.println(abcs.get(1).getName());
2 楼 E-Hunter 2011-05-07  
zozoh 写道
? 如果 cs = "[...]" 是没问题,如果事 cs="{...}" 也能工作吗?

呃~~好像只传入过String...
1 楼 zozoh 2011-05-07  
? 如果 cs = "[...]" 是没问题,如果事 cs="{...}" 也能工作吗?

相关推荐

    java开源包101

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包10

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包1

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包11

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包2

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包3

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包6

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包5

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包4

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包8

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包7

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包9

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    Java资源包01

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    JAVA上百实例源码以及开源项目源代码

    Java数组倒置 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印...

Global site tag (gtag.js) - Google Analytics