import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.List; import org.junit.Test; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.TypeReference; public class GenericTypeTest { static class Foo<T>{ private T t; public T getT() { return t; } public void setT(T t) { this.t = t; } } @Test public void test_FirstWithClass() { Foo<List<Integer>> foo = new Foo<List<Integer>>(); List<Integer> list = new ArrayList<Integer>(); list.add(3); foo.setT(list); String v = JSON.toJSONString(foo); System.out.println(v); //parse with class Foo<?> rst = JSON.parseObject(v, foo.getClass()); assertTrue(rst.getT() instanceof JSONArray); //parse with TypeReference rst = JSON.parseObject(v,new TypeReference<Foo<List<Integer>>>(){}); assertTrue(rst.getT() instanceof JSONArray);//这里没有失败 } // @Test//此用例跟上边那个不能同时跑,要不然上边跑过之后下边就跑不通了 public void test_FirstWithTypeReference() { Foo<List<Integer>> foo = new Foo<List<Integer>>(); List<Integer> list = new ArrayList<Integer>(); list.add(3); foo.setT(list); String v = JSON.toJSONString(foo); System.out.println(v); //parse with TypeReference Foo<?> rst = JSON.parseObject(v,new TypeReference<Foo<List<Integer>>>(){}); assertFalse(rst.getT() instanceof JSONArray); } }
文字描述的话就是:
泛型类型反序列化调用paseObject的时候,第一次parseObject传Class,后边传TypeReference或者Type就解析不出泛型类型了,泛型对应的类型只能解析成JsonObject
版本1.2.4及以前,可以解析泛型的版本,应该都有。暂时可以通过含泛型的对象反序列化的时候,只通过传入Type或者TypeReference类型来实现。
相关推荐
6. **Fastjson 特性**:Fastjson 提供了许多其他特性,如支持泛型、处理日期、自定义序列化和反序列化策略等。它还提供了高效的性能,使得它成为 Java 开发者常用的 JSON 处理库之一。 总之,理解 Fastjson 的序列...
这里,我们为`value`和`hashValue`设置了Fastjson序列化器,而`key`和`hashKey`使用了默认的`StringRedisSerializer`,因为Redis的key通常为字符串。 **3. 示例实体类** 为了演示序列化和反序列化的效果,我们可以...
这些库提供了JSON的序列化和反序列化功能,将Java对象转换为JSON字符串,以及将JSON字符串转换回Java对象。 1. **Fastjson**:Fastjson是阿里巴巴开源的一个高性能的JSON库,它的设计目标是处理速度极快,API简洁...
fastJSON 是一个快速的 JSON 组件,可以用于 C# 中对 JSON 数据的序列化和反序列化。下面是关于 fastJSON 的知识点: fastJSON 简介 fastJSON 是一个开源的 JSON 序列化组件,可以用于 C# 中对 JSON 数据的序列化...
它可以处理基本类型、复合类型,甚至是泛型对象,同时也支持自定义序列化和反序列化逻辑。 - Gson提供了丰富的API,如`GsonBuilder`,允许开发者定制序列化过程,比如忽略某些字段,或者设置日期格式等。 在实际...
缺省情况下,FastJSON 将 Date 类型序列化为 long,这个使得序列化和反序列化的过程不会导致时区问题。 FastJSON WriteClassName 特性 FastJSON 支持序列化时写入类型信息,从而使得反序列化时不至于类型信息丢失...
它的使用简单,支持复杂的类型转换,包括泛型、枚举、自定义序列化和反序列化策略。Gson的优势在于其灵活性和强大的类型处理能力,使得它在处理JSON数据时非常便捷。 2. Jackson(FasterXML Jackson): Jackson是...
fastjson-1.2.83.jar下载,...4. 支持泛型:fastjson支持泛型类型的解析和序列化。 5. 支持JSONPath:fastjson支持JSONPath表达式查询。 6. 支持注解:fastjson支持多种注解配置JSON序列化和反序列化。 7. 支持携带格式:f
缺省情况下,FastJSON 将 Date 类型序列化为 long,这个使得序列化和反序列化的过程不会导致时区问题。 FastJSON 还提供了基于格式化的 SerializerFeature,例如可以使用 SerializerFeature.WriteDateUseDateFormat...
在Java开发中,序列化和反序列化是数据转换的重要环节,主要用于将对象转换为可存储或传输的数据格式,如JSON字符串,以及将这些数据还原为原来的对象。本压缩包包含fastJson、Gson和Jackson这三种流行JSON库的jar...
- **自定义Map Key**:对于Map中的Key,Fastjson可以处理非String类型的Key,只要提供适当的序列化和反序列化策略。 7. **其他功能** - **JSONPath支持**:Fastjson实现了JSONPath,一种类似于XPath的查询语言,...
Fastjson是阿里巴巴开发的一款高效的Java语言实现的JSON库,它具有极快的速度和小巧的体积,广泛应用于数据解析和序列化场景。Fastjson 1.2.2版本是该库的一个稳定版本,提供了丰富的功能和良好的性能。在这个绿色版...
3. **支持泛型**:Fastjson在处理泛型时非常灵活,能够轻松处理各种泛型对象的序列化和反序列化。 4. **定制化序列化**:Fastjson提供了多种接口(如`NameFilter`、`PropertyFilter`等),允许开发者自定义序列化...
- **TypeReference**:在处理泛型类型时,由于 Java 的类型擦除,FastJson 使用 TypeReference 来保存原始的类型信息,从而在反序列化时能正确恢复泛型类型。 此外,FastJson 还支持 JSONPath,这是一种类似于 ...
FastJSON 支持写入类型信息,从而使得反序列化时不至于类型信息丢失。例如,使用 WriteClassName 特性可以在序列化时写入类型信息。 FastJSON 还支持循环引用,无需额外的 JAR,可以直接跑在 JDK 上。 FastJSON 是...
- 在反序列化过程中,如果JSON对象包含Java Bean没有的字段,Fastjson默认会抛出异常。可以使用`@JSONField(serialize=false, deserialize=false)`注解来忽略这些字段。 8. **处理泛型** - Fastjson支持泛型,...
总结,Fastjson-1.2.35.jar作为Fastjson的一个特定版本,不仅具备了Fastjson系列的所有优点,还对已知问题进行了修复和完善,为开发者提供了更稳定的JSON处理工具。在实际开发中,合理利用Fastjson的特性,可以显著...
- **高性能**:Fastjson 通过优化的算法,使其在 JSON 序列化和反序列化速度上领先于同类库。 - **轻量级**:API 设计简洁,易于理解和使用,对内存和 CPU 资源消耗低。 - **全面支持**:不仅支持基本数据类型和 ...
例如,`parseObject(String jsonString, Type type)`方法允许指定泛型类型,确保了反序列化的安全性。 5. **流式处理**:对于处理大量数据,Fastjson支持流式API,可以分块读写JSON,减少内存消耗,提高效率。 6. ...
缺省情况下,FastJSON 将 Date 类型序列化为 long,这个使得序列化和反序列化的过程不会导致时区问题。 例如: ```java long millis = 1324138987429L; Date date = new Date(millis); System.out.println(JSON....