自定义gson解析,避免解析错误,程序报错


第一步注册
    val gson: Gson
        get() {
            return GsonBuilder(
                     .registerTypeAdapter(User::class.java, deserialize())
                    .registerTypeAdapter(object : TypeToken<RealmList<com.cityfruit.old.module.messages.StringObject>>() {}.type,StringObjectDeserializer())
//                    .registerTypeAdapter(RealmList::class.java, StringObjectDeserializer())
                    .registerTypeAdapter(Date::class.java, DateDeserializer())
                    .serializeNulls()
                    .create()
        
注册自定义的customList<customBean>

    public class StringObjectDeserializer : JsonDeserializer<RealmList<StringObject>> {

        @Throws(JsonParseException::class)
        override fun deserialize(json: JsonElement, typeOF: Type,
                                 context: JsonDeserializationContext): RealmList<StringObject>? {

            val valueType = (typeOF as ParameterizedType).getActualTypeArguments().get(0)
            var sss:RealmList<StringObject> = RealmList<StringObject>()
            try {

                for (item in json.asJsonArray) {
                    item?.let {
                        sss.add(context.deserialize(it,valueType))
                    }
                }

                return sss
            } catch (e: Exception) {
                return null
            }

            throw JsonParseException("Unparseable RealmList: \"" + json.asString
                    + "\". Supported formats: " )


        }
    
定义通用list

I want it ot work for every kind of list, like CustomList<Integer>, CustomList<String>, CustomList<CustomModel> not just a specific kind of list

class CustomListConverter implements JsonDeserializer<CustomList<?>> {
    public CustomList deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext ctx) {
        Type valueType = ((ParameterizedType) typeOfT).getActualTypeArguments()[0];

        CustomList<Object> list = new CustomList<Object>();
        for (JsonElement item : json.getAsJsonArray()) {
            list.add(ctx.deserialize(item, valueType));
        }
        return list;
    }
普通的bean
public class User
{
    int id;
    String name;
    Timestamp updateDate;
}
@Override
public User deserialize(JsonElement json, Type type,
        JsonDeserializationContext context) throws JsonParseException {

    JsonObject jobject = json.getAsJsonObject();

    return new User(
            jobject.get("id").getAsInt(), 
            jobject.get("name").getAsString(), 
            new Timestamp(jobject.get("update_date").getAsLong()));
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • We’re here today to talk aboutCool Tools, which is a proj...
    ConanXin阅读 455评论 0 1
  • 本文转载自知乎 作者:季子乌 笔记版权归笔记作者所有 其中英文语句取自:英语流利说-懂你英语 ——————————...
    Danny_Edward阅读 43,955评论 4 38
  • 书生:“姑娘,荒郊野岭的,你可是在找什么?” 女子:“簪子,我的簪子不见了!” 书生:“这么大风雪,姑娘,你还是先...
    x一颗葡萄阅读 467评论 2 3
  • 一天上午,漂亮的妈妈让帅气的爸爸去超市里买菜,他们全家人要吃火锅,帅气的爸爸买完菜回来的时候,可爱的小花就...
    张青_3243阅读 308评论 0 0
  • 今天我和姥姥姥爷爸爸妈妈去了一个地方,那个地方叫羑里城。里面有很多奇奇怪怪又古老的东西。我们拿完票以后,检票进去...
    小狐狸的麻麻阅读 919评论 0 0