java使用Gson将基类列表反序列化为派生类
我正在开发一款Android应用程序,它使用JSON与C#服务器进行通信
我有一个要序列化的数据类(实际上是将接收到的数据反序列化为),其中包含派生类的列表字段,但将它们存储为它们的基类:
public class ToSerializeClass{
@SerializedName("TestString")
private String testString = "TestStringValue";
@SerializedName("DerivedClasses")
private List<BaseClass> derivedClasses;
public List<BaseClass> getDerivedClasses() {
return derivedClasses;
}
public ToSerializeClass(List<BaseClass> derivedClasses){
this.derivedClasses= derivedClasses;
}
}
例如,如果我从C#端收到以下ToSerializeClass实例,称为serializeClass:
List<BaseClass> derivedClasses = new ArrayList<>();
derivedClasses.add(new DerivedClassA());
derivedClasses.add(new DerivedClassB());
ToSerializeClass serializeClass = new ToSerializeClass(derivedClasses);
JSON字符串应该是:
{"__type":"ToSerializeClass","DerivedClasses":[{"__type":"DerivedA","FieldA":"This is a derived class."},{"__type":"DerivedB","FieldB":"This is ANOTHER derived class.", "IntValue":10}],"TestString":"TestStringValue"}
JSON字符串的“_type”:“SimpleClassName”字段显示序列化类的简单名称。这些是由C#side的序列化程序添加的。 如果必要的话,我可以让这些字段消失,但这是C#端同样问题的解决方案。 如果没有这些类型,它会是这样的:
{"DerivedClasses":[{"FieldA":"This is a derived class."},{"FieldB":"This is ANOTHER derived class.", "IntValue":10}],"TestString":"TestStringValue"}
问题是,当我尝试将JSON字符串反序列化到ToSerializeClass类的实例时:
Gson serializer = new Gson();
ToSerializeClass deserialized = serializer.fromJson(jsonString, ToSerializeClass.class);
我有反序列化的类,它是一个ToSerializeClass实例,但是DerivedClass列表是基类的集合,而不是派生类,所有派生信息都会丢失
如何将字符串反序列化为ToSerializeClass实例,以获得派生类列表
我对源代码有完全的控制权,所以我可以修改我的数据类,在必要时使用不同的集合,创建一些包装器,修改JSON字符串,但如果可能的话,我想使用Gson解决它,并且可以在没有太多开销的情况下完成
谢谢
编辑:例如DerivedClassA和DerivedClassB:
public class DerivedClassA extends BaseClass{
@SerializedName("FieldA")
private String fieldA = "This is a derived class.";
...
public DerivedClassA(){
super();
}
}
public class DerivedClassB extends BaseClass{
@SerializedName("FieldB")
private String fieldB = "This is ANOTHER derived class.";
@SerializedName("IntValue")
private int intValue = 10;
...
public DerivedClassB(){
super();
}
}
共 (0) 个答案