自定义类举例:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class Ahzoo implements Serializable {//需要将类实现Serializable或Externalizable才能进行对象的序列化操作
// 实现Serializable接口后,需要提供一个long类型的全局常量,值可以任意数,但是必须声明,反序列时会进行对比,如果serialVersionUID一致,会认为是一致的,否则就会报序列号不一致的异常
public static final long serialVersionUID = 7777777L;{
private Integer age;
private String name;
private Account account;
}
class Account implements Serializable{//Account作为Person类的属性,也必须是可进行序列化的才行
public static final long serialVersionUID = 999999999L;
int id;
public Account(int id){
this.id = id;
}
}
引入依赖:
<!-- json与对象互转-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.49</version>
</dependency>
测试使用:
import org.junit.Test;
import com.alibaba.fastjson.JSON;
public class MethodTest {
@Test
public void toTest {
//转成json字符串
String json = JSON.toJSONString(new StringBuilder("ahzoo"));
System.out.println(json);
//转成(StringBuilder)对象
StringBuilder str = JSON.parseObject(json,StringBuilder.class);
System.out.println(str);
//转成(StringBuilder)列表
List<StringBuilder> = JSONObject.parseObject(json, new TypeReference<List<StringBuilder>>() {
});
//转为Map
List<Map<String, Object>> listMap = JSON.parseObject(json, new TypeReference<List<Map<String,Object>>>(){});
}
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.7</version>
</dependency>
测试使用:
import org.junit.Test;
import com.fasterxml.jackson.core.JsonProcessingException;
public class MethodTest {
@Test
public void toTest {
ObjectMapper objectMapper = new ObjectMapper();
try {
//转为JSON
String json = objectMapper.writeValueAsString(new StringBuilder("ahzoo"));
//转为对象
StringBuilder str = objectMapper.readValue(json, StringBuilder.class);
//转为List
List<StringBuilder> = objectMapper.readValue(fileString, new TypeReference<List<StringBuilder>>() {
});
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
测试使用:
import com.google.gson.Gson;
import org.junit.Test;
public class MethodTest {
@Test
public void toTest {
//转成json字符串
Gson gson = new Gson();
String json = gson.toJson(new StringBuilder("ahzoo"));
System.out.println(json);
//json字符串转成对象
StringBuilder str = gson.fromJson(json,StringBuilder.class);
System.out.println(str);
//转为list
List<StringBuilder> list = gson.fromJson(json, new TypeToken<List<StringBuilder.class>>() {
}.getType());
}
}
使用FastJSON序列化时,栈内存溢出: 原因:需要被反序列化的实体类继承了一个类(DataEntity),该类中的一个递归方法陷入了死循环,最终导致栈内存溢出
经过多方调试后发现,类()中的()方法的属性在递归中一直都是,最终导致栈内存溢出。(我的)解决方法:将替换为
currentUser