java–RuntimeTypeAdapterFactory说“type”未定义

java–RuntimeTypeAdapterFactory说“type”未定义,第1张

概述我正在处理我需要反序列化的多态类的情况.ClassPen{Stringname;List<Animal>animals;}//Animalcanbeaninterfaceorparentclass:IamflexibleClassAnimal{AnimalTypetype;//enumintlegs;}enumAnimalType{dog,cat,pig,chicken;}ClassAn

我正在处理我需要反序列化的多态类的情况.

Class Pen{  String name;  List<Animal> animals;}//Animal can be an interface or parent class: I am flexibleClass Animal{  AnimalType type;//enum  int legs;}enum AnimalType{  dog,cat,pig,chicken;}Class AnimalDog extends Animal{  //…}Class AnimalCat extends Animal{  //…}Class AnimalPig extends Animal{  //…}

然后我创建我的Gson实例

public static Gson instanceUpperCamelCaseWithTypeAdapterFactory() {    if (null == sGsonUpperCamelCase) {        final RuntimeTypeAdapterFactory<Animal> typeFactory = RuntimeTypeAdapterFactory                .of(Animal.class, “type")                .registerSubtype(AnimalDog.class, “dog”)                .registerSubtype(AnimalCat.class, “cat”)                .registerSubtype(AnimalPig.class, “pig”);        sGsonUpperCamelCase = new GsonBuilder().setFIEldNamingPolicy(FIEldNamingPolicy.UPPER_CAMEL_CASE)                .registerTypeAdapterFactory(typeFactory).create();    }//the naming policy is because server sends me upper case fIElds whereas Java fIElds are lowercase.    return sGsonUpperCamelCase;}

为了从包含动物清单的Json中获取动物,我这样做

List<Animal> animals = gson.fromJson(Json, new Typetoken<List<Animal>>() {}.getType());

我完全是Gson的新手.完全.所以不要太困惑我,我怎么能解决这个问题呢?

错误跟踪:

com.Google.gson.JsonParseException: cannot deserialize class com.company.appname.data.model.Animal because it does not define a fIEld named typecom.company.appname.utils.RuntimeTypeAdapterFactory.read(RuntimeTypeAdapterFactory.java:204)com.Google.gson.TypeAdapter.read(TypeAdapter.java:199)com.Google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)com.Google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)com.Google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)com.Google.gson.internal.bind.ReflectiveTypeAdapterFactory.read(ReflectiveTypeAdapterFactory.java:117)com.Google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:217)com.Google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)com.Google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)com.Google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)com.Google.gson.Gson.fromJson(Gson.java:861)com.Google.gson.Gson.fromJson(Gson.java:826)com.Google.gson.Gson.fromJson(Gson.java:775)

我通过在线验证器运行Json,没有问题.它有很多项目.我在这里展示两个.

{“Animals”:[{             “ID":9,           “type”:”dog”,           “name”:”maximus”        },        {             “ID":10,           “type”:”cat”,           “name”:”meowy”,           “yarns”:5,           “nice”:true        }]}

解决方法:

RuntimeTypeAdapterFactory.class
行号 – > 203

需要更换

JsonElement labelJsonElement = JsonElement.getAsJsonObject().remove(typeFIEldname);

JsonElement labelJsonElement = JsonElement.getAsJsonObject().get(typeFIEldname);
总结

以上是内存溢出为你收集整理的java – RuntimeTypeAdapterFactory说“type”未定义全部内容,希望文章能够帮你解决java – RuntimeTypeAdapterFactory说“type”未定义所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1119428.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存