Gson手动序列化POJO(工具类)

gson2.7版本

只是简单的工具类(练习所用):

package pojo;
import javax.xml.bind.annotation.XmlSeeAlso;

import com.google.gson.annotations.SerializedName;

public class User {
    public String name;
    public int age;
    @SerializedName(value="email_Address",alternate={"email"})
    public String emailAddress;
    public User() {
    }
    public User(String name, int age, String emailAddress) {
        super();
        this.name = name;
        this.age = age;
        this.emailAddress = emailAddress;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getEmailAddress() {
        return emailAddress;
    }
    public void setEmailAddress(String emailAddress) {
        this.emailAddress = emailAddress;
    }
    @Override
    public String toString() {
        return "User [name=" + name + ", age=" + age + ", emailAddress=" + emailAddress + "]";
    }

}
package utils;

import java.io.IOException;
import java.io.StringReader;
import java.lang.reflect.Field;

import com.google.gson.Gson;
import com.google.gson.stream.JsonReader;

import pojo.User;

/**
 * 处理json工具类
 * @Description:
 * @author zbs
 * @date 2016年9月30日 上午10:06:05
 */
public class JsonUtils {
    public static void main(String[] args) {
        String json="{\"name\":\"学学习\",\"age\":\"24\"}";
        User user = (User) getObjectFromJson(User.class, json);
        System.out.println(user);
    }
    /**
     * json-->pojo
     * @Description:序列化json
     * @param clazz
     * @param json
     * @return void 返回类型
     */
    @SuppressWarnings("all")
    public static  Object getObjectFromJson(Class clazz, String json) {
        JsonReader reader = new JsonReader(new StringReader(json));
        Field[] field = clazz.getDeclaredFields();
        Object obj = null;
        try {
            // 获取当前对象
            obj = clazz.newInstance();
            reader.beginObject();
            while (reader.hasNext()) {
                String name = reader.nextName();
                for (Field f : field) {
                    if (f.getName().equals(name)) {
                       if (f.getType() == int.class) {
                            f.setInt(obj, reader.nextInt());
                        }else if(f.getType() == Double.class){
                            f.setDouble(obj, reader.nextDouble());
                        }else if (f.getType() == Long.class) {
                            f.setLong(obj, reader.nextLong());
                        }else if (f.getType() == Boolean.class) {
                            f.setBoolean(obj, reader.nextBoolean());
                        }else{
                            f.set(obj, reader.nextString());
                        }
                    }
                }
            }
            reader.endObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return obj;
    }
}

  

  

时间: 2024-08-04 13:46:41

Gson手动序列化POJO(工具类)的相关文章

Json序列化java工具类

json序列化通用工具类(java) >为了支持此工具类的正常使用,先导入以下jar包 1.lombok包是一个简化java冗余代码的jar包,实际开发中很方便 在maven的pom文件中导入lombok坐标 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.18</version&

记录--Gson、json转实体类、类转json

需要导入Gson jar包 最近在做一个java web service项目,需要用到jason,本人对java不是特别精通,于是开始搜索一些java平台的json类库. 发现了google的gson,因为之前对于protocolbuf有一些了解,带着一些好奇心,我开始使用了gson. 经过比较,gson和其他现有java json类库最大的不同时gson需要序列化得实体类不需要使用annotation来标识需要序列化得字段,同时gson又可以通过使用annotation来灵活配置需要序列化的字

基于protostuff的序列化工具类开发

[toc] 基于protostuff的序列化工具类开发 前言 前面在介绍protostuff的基本使用时(可以参考文章protostuff基本使用),都是针对某个类写的序列化和反序列化方法,显然这样不具有通用性,例如在进行远程过程调用时,传输的对象并不唯一,这时就需要开发具有通用性的序列化工具类,即不管序列化的对象是什么类型,都可以使用该工具类进行序列化.下面就来开发这样的工具类. 基于这个需要,下面会开发两个序列化工具类,一个是不具有缓存功能的SerializationUtil,一个是具有缓存

对象序列化和反序列化应该写为一个工具类

对象序列化和反序列化工具类 package com.umu.util; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectInputStream; import java.io.Object

redis缓存工具类,提供序列化接口

1.序列化工具类 1 package com.qicheshetuan.backend.util; 2 3 import java.io.ByteArrayInputStream; 4 import java.io.ByteArrayOutputStream; 5 import java.io.ObjectInputStream; 6 import java.io.ObjectOutputStream; 7 8 public class SerializeUtil { 9 10 //序列化 11

Java 序列化工具类

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputSt

Json转换工具类(基于google的Gson和阿里的fastjson)

在项目之中我们经常会涉及到字符串和各种对象的转换,为此特地整理了一下常用的转换方法 一.基于com.google.code.gson封装的json转换工具类 1. 在pom.xml文件里面引入gson的依赖 <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.3</version> &

序列化工具类({对实体Bean进行序列化操作.},{将字节数组反序列化为实体Bean.})

package com.dsj.gdbd.utils.serialize; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; /** * * @作用:序列化工具类 * @功能: * @作者: wyt * @

Hibernate-validate工具类,手动调用校验返回结果

引言:在常见的工程中,一般是在Controller中校验入参,校验入参的方式有多种,这里介绍的使用hibernate-validate来验证,其中分为手动和自动校验,自动校验可以联合spring,使用@Valid注解,以及 BindingResult类来自动收集消息,这里介绍的如何自动的,随时随地的调用工具类,校验指定类或注定属性是否符合规则,将错误封装. 1. 添加 hibernate-validate依赖 <!--hibernate validate--> <dependency&g