指出,我们应该为任何类定义默认的无args构造函数,以便正确地使用Gson。更重要的是,在 on Gson的InstanceCreator类中,如果我们试图反序列化缺少默认构造函数的类的实例,那么就会引发异常,在这种情况下,我们应该使用InstanceCreator。但是,我已经尝试过在没有默认构造函数的类中测试使用Gson,并且在没有任何麻烦的情况下进行序列化和反序列化工作。
这是反序列化的代码。一个没有非args构造函数的类:
public class Mushroom {
private String name;
private double diameter;
我有一个GsonFactory声明如下:
public class GsonFactory {
public Gson create() {
return new GsonBuilder()
.setPrettyPrinting()
.registerTypeAdapter(MyInterface.class, new MyInstanceCreator())
.create();
}
private static final GsonFactory ins
我有一个简单的类,包含类型为name的java.lang.CharSequence变量。
class Person {
public java.lang.CharSequence name;
}
当我尝试使用GSON库反序列化JSON字符串时
Person p;
Gson gson = new Gson();
String json = "{\"name\":\"dinesh\"}";
p = gson.fromJson(json, Person.class);
我使用反序列化对象,我告诉gson接口类,而不是我想要的对象的实现类。我注册了一个构造实现类实例的InstanceCreator。
此测试演示了我遇到的问题:
public class UnexpectedGsonBehaviorTest {
public static interface Fruits {
List<String> getFruitList();
}
public static class FruitsImpl implements Fruits {
private List<String>
我有一个像这样的接口类。
public interface Species {
String name();
}
和一个用Human实现@AutoValue的TypeAdapter类。
@AutoValue
public abstract class Human implements Parcelable, Species {
public static Human create(String humanVariable) {
return new AutoValue_Human(humanVariable);
}
public static
我有个小问题。我在一个json文件中存储了一些数据,它工作得很好。但是,如果我试图检索这些数据,那么我试图创建的对象的接口就会出现问题。这是我的类的简化版本
public class MyObject{
//this is a interface
public Vector3Int position;
...}
好吧,GSON不能在没有构造函数的情况下创建接口,所以我创建了这个类:
public class VectorInstanceCreator implements InstanceCreator<Vector3Int >{
@Override
public
在带有reified类型的函数中,我遇到了使用Gson反序列化的奇怪行为。只有当类型参数中涉及到interfaces时,才会发生这种情况。
请使用以下代码:
val toBeSerialized = listOf("1337")
with(Gson()) {
val ser = toJson(toBeSerialized)
val deser = fromJson<List<Serializable>>(ser)
}
第4行使用自定义扩展函数Gson.fromJson(json: String): T。
如果将定义为具体化,则失败:
in
我的问题很简单。我必须实现一些TypeConverters来管理安卓中房间数据库的数据。 我可以将Range< Date>>序列化为一个字符串来存储它。我用了一个简单的方法: @TypeConverter
fun rangeToString(range: Range <Date>?): String {
val gson = Gson()
return gson.toJson(range)
} 但是,当我试图通过相反的过程来获取相同的信息时: @TypeConverter
fun stringToRange(value: String): Ran
我正在尝试使用Gson将json数据从URL映射到我的java类。下面是该类的代码:
public class Sessions {
public Boolean active;
public String contributor_covu_id;
public String created_at;
public String key;
public String status;
public Boolean getActive() {
return active;
}
public void setActive(Boolean active) {
this.active =
我根据用户类型序列化一个UserInterface类型的子类。这些子类有列表。角色也是一个接口。我已经写了自定义的Gson适配器:
public class InterfaceAdapter<T> implements JsonSerializer<T>, JsonDeserializer<T> {
public JsonElement serialize(T object, Type interfaceType, JsonSerializationContext context) {
final JsonObject wrapper = new J
我有以下POJO:
public interface Shape {
public double calcArea();
public double calcPerimeter();
}
public class Rectangle implement Shape {
// Various properties of a rectangle
}
public class Circle implements Shape {
// Various properties of a circle
}
public class ShapeHolder {
p
我希望使用将json数据解析为java对象。
下面是我要解析的数据的一个示例:
{"isBean":{"userName":"test","password":"password112"}}
IsBean.java
public interface IsBean extends Serializable,IsSerializable{
long getId();
}
User.java
public class User implements IsBean,IsSerializable,Serial
我正在为类ForeignCollection (即abstract )编写反序列化器,并在中提供给我。请看下面的代码。
public class ForeignCollectionDeserializer implements JsonDeserializer<ForeignCollectionDeserializer> {
@Override
public ForeignCollection deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserial
我试图使用Gson将包含接口的json字符串和具有接口类型和包含接口类型的列表的哈希映射反序列化到java对象中。但我得到了
java.lang.RuntimeException:无法为接口com.abc.Dummy调用非args构造函数.使用Gson注册此类型的InstanceCreator可能会解决此问题。
我试图通过实例化构造函数来注册实例创建者的类型适配器,以便用虚拟值实现类,但是虚拟值没有被反序列化值覆盖。
虚拟是接口,SubClassDummy是实现类。
public class DummyInstanceCreator implements InstanceCreator<
我定义了以下类:
public class ClassObjectTwo {
Long a;
Long b;
}
public class ClassObjectThree{
Long c;
Long d;
}
public class ClassObject{
private final ClassObjectTwo obj1;
private final ClassObjectTwo obj2;
private final ClassObjectTwo obj3;
private final Multimap<String, ClassObjectThree>
我是gson的新手,正在尝试解决如何在对象中反序列化列表的问题。
错误消息提示为播放器创建一个InstanceCreator,我就是这么做的。但在实现时,我发现反序列化的对象包含一个玩家列表,该列表的name字段设置为“默认值”,而不是从json字符串中提取值。因此,我现在想知道这种方法是否正确。
这是我正在研究的模型的简化,但突出了问题...
public interface Player {
String name();
}
public class PlayerImpl implements Player {
private String name;
pub
我在我的android应用程序中使用GSON和Volley库进行联网,但在使用Gson将Json响应转换为Model类时,我遇到了以下错误:
88-2006/ E/Volley﹕ [121] NetworkDispatcher.run: Unhandled exception java.lang.RuntimeException: Unable to invoke no-args constructor for class [Lcom.example.model.Product;. Register an InstanceCreator with Gson for this type may