java枚举类型转json_使用枚举类型做为 javabean

使用枚举类型做为 javabean

接口返回的 json 中状态一般是 Int 类型的,如果不使用枚举则在代码中不知道这个 Int 是什么具体类型,使用枚举也不会耗费多少性能。

1. json 格式

{

"box":{

"name":"hat",

"price":200,

status : 2

}

}

2. 枚举变量

enum class BoxStatusType(val status: Int) {

S_NEW(0),

S_SHOW(1),

S_ACTIVE(2),

S_END(3);

companion object {

fun buildStatus(s: Int): BoxStatusType? {

for (status in BoxStatusType.values()) {

if (s == status.status) {

return status

}

}

return null

}

}

}

3. javaBean

open class Box {

var name: String = ""

var price: Int = 0

var status: BoxStatusType? = null

}

4. 自定义 JsonSerializer

class BoxStatusTypeSerializer : JsonSerializer, JsonDeserializer {

override fun serialize(src: BoxStatusType?, typeOfSrc: Type?, context: JsonSerializationContext?): JsonElement {

return JsonPrimitive(src?.status)

}

override fun deserialize(json: JsonElement, typeOfT: Type?, context: JsonDeserializationContext?): BoxStatusType? {

return BoxStatusType.buildStatus(json?.asInt)

}

}

5. 注册自定义的 JsonSerializer

private static Retrofit getRetrofitInstance() {

Gson gson = new GsonBuilder()

.registerTypeAdapter(BoxStatusType.class, new BoxStatusTypeSerializer())

.create();

if (mRetrofit == null) {

synchronized (HTTPCenter.class) {

if (mRetrofit == null) {

mRetrofit = new Retrofit.Builder()

.baseUrl(HTTPService.Companion.getSERVICE_DEFAULT())

.addConverterFactory(GsonConverterFactory.create(gson))

.addCallAdapterFactory(RxJavaCallAdapterFactory.create())

.client(initOkHttpClient()).build();

}

}

}

return mRetrofit;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值