枚举类型给我们的程序带来了好处,如何用Gson来实现与Json的互转呢?请看本文.
本文重点掌握如何自己写一个TypeAdapter及注册TypeAdapter和处理Enum类型.
实体类:
- public enum PackageState {
- PLAY, UPDATE, UPDATING, DOWNLOAD, DOWNLOADING,
- }
- public class PackageItem {
- private String name;
- private PackageState state;
- private String size;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public PackageState getState() {
- return state;
- }
- public void setState(PackageState state) {
- this.state = state;
- }
- public String getSize() {
- return size;
- }
- public void setSize(String size) {
- this.size = size;
- }
- @Override
- public String toString() {
- return "PackageItem [name=" + name + ", size=" + size + ", state="
- + state + "]";
- }
- }
自己写一个转换器实现JsonSerializer<T>接口和jsonDeserializer<T>接口:
- mport java.lang.reflect.Type;
- import com.google.gson.JsonDeserializationContext;
- import com.google.gson.JsonDeserializer;
- import com.google.gson.JsonElement;
- import com.google.gson.JsonParseException;
- import com.google.gson.JsonPrimitive;
- import com.google.gson.JsonSerializationContext;
- import com.google.gson.JsonSerializer;
- public class EnumSerializer implements JsonSerializer<PackageState>,
- JsonDeserializer<PackageState> {
- // 对象转为Json时调用,实现JsonSerializer<PackageState>接口
- @Override
- public JsonElement serialize(PackageState state, Type arg1,
- JsonSerializationContext arg2) {
- return new JsonPrimitive(state.ordinal());
- }
- // json转为对象时调用,实现JsonDeserializer<PackageState>接口
- @Override
- public PackageState deserialize(JsonElement json, Type typeOfT,
- JsonDeserializationContext context) throws JsonParseException {
- if (json.getAsInt() < PackageState.values().length)
- return PackageState.values()[json.getAsInt()];
- return null;
- }
- }
测试类:
- import com.google.gson.Gson;
- import com.google.gson.GsonBuilder;
- public class GsonTest6 {
- public static void main(String[] args) {
- GsonBuilder gsonBuilder = new GsonBuilder();
- gsonBuilder.registerTypeAdapter(PackageState.class,
- new EnumSerializer());
- Gson gson = gsonBuilder.create();
- PackageItem item = new PackageItem();
- item.setName("item_name");
- item.setSize("500M");
- item.setState(PackageState.UPDATING);// 这个 state是枚举值
- String s = gson.toJson(item);
- System.out.println(s);
- System.out.println("--------------------------------");
- PackageItem retItem = gson.fromJson(s, PackageItem.class);
- System.out.println(retItem);
- }
- }
输出结果(结果中已经将state的对应枚举类型转为了int类型):
- {"name":"item_name","state":2,"size":"500M"}
- --------------------------------
- PackageItem [name=item_name, size=500M, state=UPDATING]
相关推荐
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。...Json转换利器Gson之实例六-注册TypeAdapter及处理Enum类型 (http://blog.csdn.net/lk_blog/article/details/7685347)
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。 java对象或者list转换为json字符串
Gson 2.3.1作为一款高效的JSON转换工具,其简洁的API和强大的功能使得在Java和Android项目中处理JSON数据变得简单。通过理解和熟练掌握Gson的用法,开发者可以更便捷地进行数据交换和存储,提升项目的开发效率。在...
此外,Gson还支持复杂的类型转换,例如泛型、自定义序列化和反序列化逻辑、枚举类型等。同时,对于那些不希望出现在JSON输出中的字段,可以通过`@Expose`和`@SerializedName`注解进行控制。在处理日期和时间时,可以...
本教程将深入探讨如何使用Gson库解析复杂的JSON实例,让你只需寥寥几行代码就能轻松处理JSON解析问题。 ### Gson库简介 Gson库的核心功能是将Java对象(如自定义类)转换为JSON字符串,反之亦然。这个库非常直观,...
gson-2.10.1.jar gson-2.10.jar gson-2.9.1.jar gson-2.9.0.jar gson-2.8.9.jar gson-2.8.8.jar gson-2.8.7.jar gson-2.8.6.jar gson-2.8.5.jar gson-2.8.4.jar gson-2.8.3.jar gson-2.8.2.jar gson-2.8.1.jar gson-...
Gson是Google开发的一款强大的Java库,用于将Java对象转换为JSON...总之,Gson-2.8.2是JSON处理的得力工具,它提供了丰富的功能,易于使用,并且拥有源码和详细的文档支持,可以帮助开发者更高效地进行数据交换和处理。
NULL 博文链接:https://bdk82924.iteye.com/blog/1988977
6. **枚举支持**:Gson能够自动处理枚举类型,将其转换为JSON字符串和从JSON恢复。 7. **运行时类型信息**:Gson可以保留原始类型信息,即使在反序列化时类型不明确也能正确处理。 8. **性能优化**:Gson经过精心...
Gson-2.8.0的官方jar包合集【gson-2.8.0.jar,gson-2.8.0-sources.jar,gson-2.8.0-javadoc.jar】,JSON解析类库Gson库的jar包。
赠送jar包:gson-2.8.0.jar; 赠送原API文档:gson-2.8.0-javadoc.jar; 赠送源代码:gson-2.8.0-sources.jar; 赠送Maven依赖信息文件:gson-2.8.0.pom; 包含翻译后的API文档:gson-2.8.0-javadoc-API文档-中文...
赠送jar包:gson-2.8.6.jar; 赠送原API文档:gson-2.8.6-javadoc.jar; 赠送源代码:gson-2.8.6-sources.jar; 赠送Maven依赖信息文件:gson-2.8.6.pom; 包含翻译后的API文档:gson-2.8.6-javadoc-API文档-中文...
`gson-gson-parent-2.10.1.tar.gz`是一个压缩包,包含了Gson库的版本2.10.1,它通常用于Java项目中处理JSON数据的场景。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也...
Gson作为Java对象和JSON转换的利器,通过其强大的功能和简洁的API,简化了开发者在JSON数据处理中的工作。无论是基本类型还是复杂对象,Gson都能轻松应对,同时提供了自定义转换的灵活性,使得在实际项目中更加...
赠送jar包:gson-2.8.9.jar; 赠送原API文档:gson-2.8.9-javadoc.jar; 赠送源代码:gson-2.8.9-sources.jar; 赠送Maven依赖信息文件:gson-2.8.9.pom; 包含翻译后的API文档:gson-2.8.9-javadoc-API文档-中文...
由于其简单易用且功能强大,Gson成为了Java开发者处理JSON的首选库之一。 总结起来,Gson是一个强大的JSON库,提供了从Java对象到JSON和反之的转换功能。这个压缩包中包含的不同版本展示了Gson随着时间推移的演进,...
在实际开发中,可以将`gson-2.3.jar`添加到项目的类路径,使用`gson-2.3-javadoc.jar`作为参考,而`gson-2.3-sources.jar`则有助于深入学习和调试。这三部分共同构成了Gson库的完整学习和开发环境,方便开发者在处理...
Gson的优势在于其强大的类型安全性和自动序列化/反序列化功能,使得开发者无需手动编写繁琐的JSON解析代码。 在Java开发中,为了使用JSON和Gson,你需要包含以下jar包: 1. **json.jar**:这是处理JSON的基本库,...
3. **类型适配器(TypeAdapter)**:Gson允许自定义类型适配器,以处理特定类型的序列化和反序列化,如日期、自定义类等,确保数据转换的准确性和灵活性。 4. **复杂对象处理**:Gson能处理嵌套的对象和数组,以及...
为了方便地处理JSON数据,Java社区提供了多个优秀的JSON库,包括Gson、Fastjson、Jackson和json-lib。这四大JSON库各有特点,适应不同的使用场景。 1. Gson: Gson是Google提供的一个开源库,它能够将Java对象转换...