-
Notifications
You must be signed in to change notification settings - Fork 941
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
让Nutz Json支持多泛型 #85
Comments
TypeReference的实现想法, 可以借鉴, 满不错的. 不过, 感觉有点不够. 另外关于Nutz泛型的支持, 不仅是Json, 其它地方也存在这个问题, 对泛型的支持并不好. 主要是没有提取出一套关于泛型的实现出来, 实现机制上各个地方使用的方式也不一样. 要调整成泛型支持的话, 工作量满大的, 很多地方都需要把Class<?> 改成 Type... 我觉得可以使用ParameterizedTypeImpl来做, JDK里面有这个实现, 不知道怎么的引用不了...搞不懂是什么原因. 不过, 它的实现也满简单的. 概念, 接口更符合JAVA泛型规范一点吧. |
TypeReference 貌似不属于标准 JDK 的类吧 不过应该考虑支持一个类似这样的写法 List list = Json.fromJsonAsList(Abc.class, Streams.fileInr("org/nutz/json/list.txt")); |
这种写法应该好支持吧, 把现在只处理单个JSON, 改成处理JSON集, 并组装返回, |
原来 NutType 就是 ParameterizedType 类型的呀... 悲剧, 之前还在纠结有些东西怎么实现呢, 没想到都有了... 看来得重新看代码了... |
@juqkai 我也是才看到,呵呵, Wendal 加的哦 那,这个 bug 你 fix 咯 加这几个函数:
|
已实现上面几个接口. |
zozoh commented "TypeReference 貌似不属于标准 JDK 的类吧" (o一-一) 我提这个issue的目的是支持多泛型 |
你说的这种情况NutType是支持的, 只是写法上面不好看而已: Type type = new NutType(Custom.class, String.class, Bean.class); |
我来举个实际的例子吧,如果我的json是这样子 { public class Employee{ request = (JsonRequest) Json 你试试看吧,默认是不支持的,而fastjson支持这种反序列化 |
这个已经实现了 |
目前nutz json对泛型的支持,采用了NutType,使用方法如下:
List list = (List) Json.fromJson( NutType.list(Abc.class),
Streams.fileInr("org/nutz/json/list.txt"));
这种写法有些纠结不是嘛,除了不支持多泛型,还得强制执行……
可以参考下fastjson的写法,最关键的一句是:
List<List<Map<String, Bean>>> list = JSON.parseObject(text, new TypeReference< List<List<Map<String, Bean>>> >() {});
完美支持多泛型,而且无缝复制,告别强制转型^_^
http://code.alibabatech.com/wiki/display/FastJSON/TypeReference
So,各位Nutz大侠们,有空瞅瞅吧……
The text was updated successfully, but these errors were encountered: