GSONでオブジェクト化するために解析する必要があるjsonを取得します。
"product":{
"product_type":"assignment",
"id":717,
"product_profile":{
"title":"new Order from java",
"info":"Some special info",
"dtl_expl":true,
"special_info":""
}
}
「product_profile」は、「product_type」で取得したものに応じて異なるオブジェクトになります。そのオブジェクトごとにクラスを作成しました-割り当てと書き込み。それらはProductTypeクラスの子です。正しいオブジェクトを返す必要があるProductクラスにインターフェイスを実装します-割り当てまたは書き込みは、「product_type」の値によって異なります。私の製品クラス
public class Product implements IProductType{
ProductAssignment prodAss;
ProductWriting prodWr;
ProductType returnState;
@SerializedName("id")
int id;
@SerializedName("product_type")
String product_type;
@SerializedName("product_profile")
ProductType product_profile;
public Product()
{
}
public Product(int id, String product_type, ProductType product_profile)
{
this.id = id;
this.product_type = product_type;
this.product_profile = product_profile;
}
public int getProductId()
{
return this.id;
}
public String getProductType()
{
return this.product_type;
}
public ProductType getProduct()
{
return this.returnObject(product_type);
}
public void setProductId(int id)
{
this.id = id;
}
public void setProductTitle(String product_type)
{
this.product_type = product_type;
}
public void setProduct(ProductType product_profile)
{
this.product_profile = this.returnObject(product_type);
}
@Override
public String toString() {
return "id=" + id + " " + "title=" + product_type
+ " " + "profile=" + product_profile + "}";
}
@Override
public ProductType returnObject(String res)
{
System.out.println("Product");
System.out.println(product_profile);
if (res.equals("assignment"))
{
this.product_profile = new ProductAssignment();
System.out.println("I'm going to parse Assignment");
}
else if (res.equals("writing"))
this.product_profile = new ProductWriting();
return product_profile;
}
}
しかし、jsonを解析して次のようなオブジェクトにしようとすると:
Gson gson = new Gson();
Product product = gson.fromJson(res,Product.class);
私はそのような製品オブジェクトを取得します:
id=447 title=assignment profile=ProductType@e49f9fa
したがって、「id」と「product_type」は正しく解析されますが、ProdutTypeのAssignmentオブジェクトではありません。
私のProductTypeクラス:
public class ProductType implements IProductType{
String product;
static ProductType productType;
static ProductAssignment productAssignment;
static ProductWriting productWriting;
IProductType component;
ProductType returnState;
ProductAssignment prodAss;
ProductWriting prodWr;
public ProductType()
{
}
public ProductType(IProductType c)
{
component = c;
}
public ProductType getProductType()
{
return this.returnState;
}
public void setProductType(ProductType returnState)
{
this.returnState = returnState;
}
@Override
public ProductType returnObject(String product_type)
{
if (product_type.equals("assignment"))
{
this.returnState = new ProductAssignment();
System.out.println("I'm going to parse Assignment");
}
else if (product_type.equals("writing"))
this.returnState = new ProductWriting();
return returnState;
}
@Override
public String toString()
{
return returnState.getClass().getName();
}
}