`

Fastjson反序列化泛型类型时候的一个问题

    博客分类:
  • java
阅读更多
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类型来实现。

分享到:
评论

相关推荐

    S14-fastjson反序列化1

    6. **Fastjson 特性**:Fastjson 提供了许多其他特性,如支持泛型、处理日期、自定义序列化和反序列化策略等。它还提供了高效的性能,使得它成为 Java 开发者常用的 JSON 处理库之一。 总之,理解 Fastjson 的序列...

    SpringBoot Redis配置Fastjson进行序列化和反序列化实现

    这里,我们为`value`和`hashValue`设置了Fastjson序列化器,而`key`和`hashKey`使用了默认的`StringRedisSerializer`,因为Redis的key通常为字符串。 **3. 示例实体类** 为了演示序列化和反序列化的效果,我们可以...

    fastjson、gson、jackson序列化和反序列化所用 json

    这些库提供了JSON的序列化和反序列化功能,将Java对象转换为JSON字符串,以及将JSON字符串转换回Java对象。 1. **Fastjson**:Fastjson是阿里巴巴开源的一个高性能的JSON库,它的设计目标是处理速度极快,API简洁...

    C#简单快速的json组件fastJSON使用介绍.docx

    fastJSON 是一个快速的 JSON 组件,可以用于 C# 中对 JSON 数据的序列化和反序列化。下面是关于 fastJSON 的知识点: fastJSON 简介 fastJSON 是一个开源的 JSON 序列化组件,可以用于 C# 中对 JSON 数据的序列化...

    protostuff fastjson gson 高性能序列化jar包

    它可以处理基本类型、复合类型,甚至是泛型对象,同时也支持自定义序列化和反序列化逻辑。 - Gson提供了丰富的API,如`GsonBuilder`,允许开发者定制序列化过程,比如忽略某些字段,或者设置日期格式等。 在实际...

    fastJSON使用.pdf

    缺省情况下,FastJSON 将 Date 类型序列化为 long,这个使得序列化和反序列化的过程不会导致时区问题。 FastJSON WriteClassName 特性 FastJSON 支持序列化时写入类型信息,从而使得反序列化时不至于类型信息丢失...

    序列化工具(Gson, Jackson, FastJson, ProtoBuf)

    它的使用简单,支持复杂的类型转换,包括泛型、枚举、自定义序列化和反序列化策略。Gson的优势在于其灵活性和强大的类型处理能力,使得它在处理JSON数据时非常便捷。 2. Jackson(FasterXML Jackson): Jackson是...

    fastjson-1.2.83.jar下载

    fastjson-1.2.83.jar下载,...4. 支持泛型:fastjson支持泛型类型的解析和序列化。 5. 支持JSONPath:fastjson支持JSONPath表达式查询。 6. 支持注解:fastjson支持多种注解配置JSON序列化和反序列化。 7. 支持携带格式:f

    fastJSON使用.docx

    缺省情况下,FastJSON 将 Date 类型序列化为 long,这个使得序列化和反序列化的过程不会导致时区问题。 FastJSON 还提供了基于格式化的 SerializerFeature,例如可以使用 SerializerFeature.WriteDateUseDateFormat...

    fastJosn Gson Jackson 序列化和反序列化所需要的jarlib.rar

    在Java开发中,序列化和反序列化是数据转换的重要环节,主要用于将对象转换为可存储或传输的数据格式,如JSON字符串,以及将这些数据还原为原来的对象。本压缩包包含fastJson、Gson和Jackson这三种流行JSON库的jar...

    fastjson-1.2.66_fastjson-1.2.66.jar_Fastjson_

    - **自定义Map Key**:对于Map中的Key,Fastjson可以处理非String类型的Key,只要提供适当的序列化和反序列化策略。 7. **其他功能** - **JSONPath支持**:Fastjson实现了JSONPath,一种类似于XPath的查询语言,...

    fastjson的jar包 绿色版

    Fastjson是阿里巴巴开发的一款高效的Java语言实现的JSON库,它具有极快的速度和小巧的体积,广泛应用于数据解析和序列化场景。Fastjson 1.2.2版本是该库的一个稳定版本,提供了丰富的功能和良好的性能。在这个绿色版...

    Fastjson介绍

    3. **支持泛型**:Fastjson在处理泛型时非常灵活,能够轻松处理各种泛型对象的序列化和反序列化。 4. **定制化序列化**:Fastjson提供了多种接口(如`NameFilter`、`PropertyFilter`等),允许开发者自定义序列化...

    fastJson全部资料

    - **TypeReference**:在处理泛型类型时,由于 Java 的类型擦除,FastJson 使用 TypeReference 来保存原始的类型信息,从而在反序列化时能正确恢复泛型类型。 此外,FastJson 还支持 JSONPath,这是一种类似于 ...

    fastJSON.docx

    FastJSON 支持写入类型信息,从而使得反序列化时不至于类型信息丢失。例如,使用 WriteClassName 特性可以在序列化时写入类型信息。 FastJSON 还支持循环引用,无需额外的 JAR,可以直接跑在 JDK 上。 FastJSON 是...

    fastjson 常用 总结

    - 在反序列化过程中,如果JSON对象包含Java Bean没有的字段,Fastjson默认会抛出异常。可以使用`@JSONField(serialize=false, deserialize=false)`注解来忽略这些字段。 8. **处理泛型** - Fastjson支持泛型,...

    fastjson-1.2.35.jar

    总结,Fastjson-1.2.35.jar作为Fastjson的一个特定版本,不仅具备了Fastjson系列的所有优点,还对已知问题进行了修复和完善,为开发者提供了更稳定的JSON处理工具。在实际开发中,合理利用Fastjson的特性,可以显著...

    fastjson使用

    - **高性能**:Fastjson 通过优化的算法,使其在 JSON 序列化和反序列化速度上领先于同类库。 - **轻量级**:API 设计简洁,易于理解和使用,对内存和 CPU 资源消耗低。 - **全面支持**:不仅支持基本数据类型和 ...

    阿里巴巴 fastJson jar包

    例如,`parseObject(String jsonString, Type type)`方法允许指定泛型类型,确保了反序列化的安全性。 5. **流式处理**:对于处理大量数据,Fastjson支持流式API,可以分块读写JSON,减少内存消耗,提高效率。 6. ...

    fastJSON.pdf

    缺省情况下,FastJSON 将 Date 类型序列化为 long,这个使得序列化和反序列化的过程不会导致时区问题。 例如: ```java long millis = 1324138987429L; Date date = new Date(millis); System.out.println(JSON....

Global site tag (gtag.js) - Google Analytics