Fastjson定製屬性的序列化和反序列化
問題
- 序列化屬性時,希望在屬性值後加些說明
- 將屬性值中的時間戳 Timestamp 反序列化為Date 型別
方法
使用fastjson序列化時,可以在bean物件的屬性上使用註解 @JSONField 做些序列化的規則,具體使用方法見參考資料。但有時候需要一些自定義化的序列化和反序列化方式,這時可以使用 serializeUsing 和 deserializeUsing 指定屬性的序列化類和反序列化類
示例程式碼
User bean定義,指定屬性序列化和反序列化方式
public class User {
private String name;
@JSONField(serializeUsing = AgeVauleSerializer.class)
private int age;
private String desc;
/**
* 自定義date反序列化方式,注意序列化時也會被序列化成時間戳
* 也可以用format="yyyy-MM-dd HH:mm:ss"定義序列化格式
*/
@JSONField(deserializeUsing = TimestampValueDeserializer.class)
private Date date;
……
//get、set方法省略
AgeVauleSerializer 定義屬性age的序列化方式。
public class AgeVauleSerializer implements ObjectSerializer {
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
int features) throws IOException {
Integer value = (Integer) object;
String text = value + " year-old";
serializer.write(text);
}
}
TimestampValueDeserializer 定義屬性date的反序列化方式。
public class TimestampValueDeserializer implements ObjectDeserializer {
@Override
public Date deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
long timestamp = parser.getLexer().longValue();
return new Date(timestamp);
}
@Override
public int getFastMatchToken() {
return 0;
}
}
參考資料
相關文章
- fastjson反序列化漏洞ASTJSON
- 【Fastjson】Fastjson反序列化由淺入深ASTJSON
- Fastjson 反序列化漏洞史ASTJSON
- springbootredis自定義序列化方式(fastJson)Spring BootRedisASTJSON
- FastJson 序列化處理 null 值ASTJSONNull
- fastjson反序列化-JdbcRowSetImpl利用鏈ASTJSONJDBC
- Fastjson反序列化漏洞復現ASTJSON
- FastJson整形資料反序列化的坑ASTJSON
- JSON繼承JsonConverter序列化與反序列化重寫類屬性JSON繼承
- Fastjson 反序列化漏洞分析 1.2.25-1.2.47ASTJSON
- Fastjson反序列化漏洞分析 1.2.22-1.2.24ASTJSON
- Fastjson1.2.24反序列化漏洞復現ASTJSON
- 在C#中使用Json.Net進行序列化和反序列化及定製化C#JSON
- python的序列化和反序列化Python
- Java的序列化和反序列化Java
- PHP的序列化和反序列化入門PHP
- FastJSON解析Json字串(反序列化為List、Map)ASTJSON字串
- 解決fastjson反序列化時報錯的問題ASTJSON
- Fastjson2基礎使用以及底層序列化/反序列化實現探究ASTJSON
- .NET物件的XML序列化和反序列化物件XML
- jackson、fastjson、kryo、protostuff等序列化工具效能對比ASTJSON
- fastjson序列化日期自動增加了1年ASTJSON
- ctf serialize 序列化和反序列化
- xml序列化和反序列化(一)XML
- C++ 序列化和反序列化C++
- 從java的序列化和反序列化說起Java
- Java物件的序列化和反序列化實踐Java物件
- jackson根據屬性名動態序列化物件欄位物件
- 從LocalDateTime序列化探討全域性一致性序列化LDA
- 序列化和反序列化pickle和json 模組JSON
- Python中物件序列化和反序列化Python物件
- [Java基礎]序列化和反序列化Java
- IO流(3) - 序列化和反序列化
- C#序列化和反序列化(json)C#JSON
- 烽火狼煙丨Fastjson反序列化漏洞風險提示ASTJSON
- 巧用fastjson自定義序列化類實現欄位的轉換ASTJSON
- 【Django drf】 序列化類常用欄位類和欄位引數 定製序列化欄位的兩種方式 關係表外來鍵欄位的反序列化儲存 序列化類繼承ModelSerializer 反序列化資料校驗原始碼分析Django繼承原始碼
- 為什麼需要序列化和反序列化