FastJson 自定义Serialize、Parser
FastJson 自定义Serialize、Parser
今天在处理Json反序列化时,在C#传过来的JSON字符串中枚举类型为int类型,FastJson对于枚举的处理有两种类型,一种是字符串一种是int类型,但是它自带的解析int是按照枚举的顺序来解析的,但是有时候值不一定和顺序相对应,所以使用自定义解析器方式进行解决。在网上找解决方案,没找到详细的方法。通过查看源代码得出解决方案
以解析如下枚举为例:
public enum Status {
Ready(10),
Completed(20);
private int value;
private Status(int value) {
this.value = value;
}
public static Status create(int value) {
switch (value) {
case 10:
return Status.Ready;
case 20:
return Status.Completed;
default:
throw new RuntimeException("code error");
}
}
public static int value(Status status){
return status.value;
}
}
反序列化过程实现objectDeserializer接口,以上枚举代码如下:
public class StatusDeserializer implements ObjectDeserializer {
public <T> T deserialze(DefaultJSONParser parser, Type type,
Object fieldName) {
JSONLexer lexer = parser.getLexer();
int value = lexer.intValue();
return (T) Status.create(value);
}
public int getFastMatchToken() {
// TODO Auto-generated method stub
return 0;
}
}
序列化过程实现ObjectSerializer接口
public class StatusSerializer implements ObjectSerializer{
public void write(JSONSerializer serializer, Object object,
Object fieldName, Type fieldType) throws IOException {
SerializeWriter out = serializer.getWriter();
if (object == null) {
serializer.getWriter().writeNull();
return;
}
out.write(Status.value((Status)object));
}
}
使用自定义的序列化和反序列化的方法如下:
序列化过程
SerializeConfig config=new SerializeConfig();
config.put(Status.class, new StatusSerializer());
String jsonStr=JSON.toJSONString(test,config);
反序列化过程
ParserConfig.getGlobalInstance().putDeserializer(Status.class, new StatusDeserializer());
Test test1=JSON.parseObject(jsonStr,Test.class);
除了处理枚举类型时,有时需要自定义序列化、反序列化方法外,在处理日期、时间等类型时也经常需要自己实现。
FastJson 自定义Serialize、Parser的更多相关文章
- fastjson自定义序列化竟然有这么多姿势?
本文介绍下fastjson自定义序列化的各种操作. 一.什么是fastjson? fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSO ...
- 记录一次源码扩展案列——FastJson自定义反序列化ValueMutator
背景:曾经遇到一个很麻烦的事情,就是一个json串中有很多占位符,需要替换成特定文案.如果将json转换成对象后,在一个一个属性去转换的话就出出现很多冗余代码,不美观也不是很实用. 而且也不能提前在j ...
- springBoot2.0+redis+fastJson+自定义注解实现方法上添加过期时间
springBoot2.0集成redis实例 一.首先引入项目依赖的maven jar包,主要包括 spring-boot-starter-data-redis包,这个再springBoot2.0之前 ...
- Solr 使用自定义 Query Parser(短语查询,精准查询)
原文出处:http://blog.chenlb.com/2010/08/solr-use-custom-query-parser.html 由于 Solr 默认的 Query Parser 生成的 Q ...
- SpringMVC使用fastjson自定义Converter支持返回jsonp格式(转)
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; import c ...
- Spring MVC中使用FastJson自定义注解
最近在做.net转译成Java.其中遇到一个很蛋疼的问题.以前.net属性名都是首字母大写.造成返回给客户端的JSON字符串属性名称都是首字母大写.为了和前端对接我们以前都是如下图所示做法 publi ...
- spring mvc fastJson 自定义类型转换(返回数据) 实现对ObjectId类型转换
json用的alibaba fastJson ValueFilter filter = new ValueFilter() { @Override public Object process(Obje ...
- 【技术累积】【点】【java】【27】@JSONField
@JSONField 该注解隶属于阿里fastjson,方便fastjson处理对象时的一些操作 源码 @Retention(RetentionPolicy.RUNTIME) @Target({ El ...
- Jackson替换fastjson
为什么要替换fastjson 工程里大量使用了fastjson作为序列化和反序列化框架,甚至ORM在处理部分字段也依赖fastjson进行序列化和反序列化.那么作为大量使用的基础框架,为什么还要进行替 ...
随机推荐
- ui-router 1.0 003 lazyloading
ui-router lazyloading 支持懒加载, 真正需要的时候再去加载模块
- pandas基础用法——索引
# -*- coding: utf-8 -*- # Time : 2016/11/28 15:14 # Author : XiaoDeng # version : python3.5 # Softwa ...
- Mac Apache WebServer 服务器配置
前言 Apache 是目前使用最广的 Web 服务器,可以支持各种脚本的执行. Mac 系统自带,无需单独安装,只需要修改几个配置就可以,简单,快捷. 有些特殊的服务器功能,Apache 都能很好的支 ...
- 判断js数组包是否包含某个元素
要判断数组中是否包含某个元素,从原理来来说,就是遍历整个数组,然后判断是否相等,我们来造个轮子,名字就山寨PHP的数组函数in_array() Array.prototype.in_array = f ...
- vue 更新了vue-cli到最新版本后引发的问题: require和import、vue-loader的问题
"vue-loader": "^12.1.0", "vue-loader": "^12.1.0", "vue- ...
- tar加密
# tar -czvf - file_name|openssl des3 -salt -k |dd of=file_name.des3 # ls flie_name file_name.des3 # ...
- 【Big Data - Hadoop - MapReduce】hadoop 学习笔记:MapReduce框架详解
开始聊MapReduce,MapReduce是Hadoop的计算框架,我学Hadoop是从Hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...
- Selenium Web 自动化 - Selenium常用API
Selenium Web 自动化 - Selenium常用API 2016-08-01 目录 1 对浏览器操作 1.1 用webdriver打开一个浏览器 1.2 最大化浏览器&关闭浏览器 ...
- Git关于pull,commit,push的总结
以前总是由于自己的自身的原因,对于每一次的git的操作,我都是通过eclipse或者是idea来进行的,但是 我每一次都不是很清楚的关于这些方面的操作,现在我们来进行关于git bash的操作,正是由 ...
- 【九天教您南方cass 9.1】 14 坐标数据的纠正
同学们大家好,欢迎收看由老王测量上班记出品的cass9.1视频课程 我是本节课主讲老师九天. 我们讲课的教程附件也是共享的,请注意索取 在测量空间中. 九天老师的联系方式 点击直接请教九天老师吧! ...