使用Gson的RuntimeTypeAdapterFactory反序列化/序列化JSON

时间:2016-06-14 15:15:56

标签: android recursion deserialization json-deserialization gson

我从服务器获得以下类型的JSON。

    {
    "templates": [
        {
          "right": [...],
          "left": [...],
          "available": true,
          "text": "some text here",
          "configuration": {
            "enabled": true,
            "trigger": {
                "triggerType": "MOVE",
                "eventName": "MOVING"
            }
          }
        },
        {
          "right": [...],
          "left": [...],
          "available": true,
          "text": "some text here",
          "configuration": {
            "enabled": true,
            "trigger": {
              "triggerType": "DURATION",
              "duration": 300,
              "trigger": {
                "triggerType": "HALT",
                "description": "HAULTING"
              }
            }
          }
        }
    ]
    }

JSON有一个对象“配置”,它可能具有“触发器”元素的递归出现。但是这种触发类型根据配置的不同而不同。

我想我已设法为不同类型的触发器创建不同的类,基类为“触发器”,如下所示

public class Trigger{
private String triggerType;

    public String getTriggerType() {
        return triggerType;
    }

    public void setTriggerType(String triggerType) {
        this.triggerType = triggerType;
    }
}

public class TiggerMove extends Trigger{

private String eventName;

    public String getEventName() {
        return eventName;
    }

    public void setEventName(String eventName) {
        this.eventName = eventName;
    } 
}

public class TiggerHault extends Trigger{

    private String description;

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        } 
    }

public class TiggerDuration extends Trigger{

private String duration;

private Tigger<T> trigger;

    public String getDuration() {
        return duration;
    }

    public void setDuration(String duration) {
        this.duration = duration;
    } 

    public String getTrigger() {
        return duration;
    }

    public void setTrigger(Trigger trigger) {
        this.trigger = trigger;
    } 
}

我读了几个使用Gson's RuntimeTypeAdapterFactory提到的答案。但我无法真正使用它,因为我看到所有的例子都使用它作为第一级元素而不是内部元素。

如何使用Android GSON对其进行反序列化?

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是使用像json to pojo这样的网站。此站点将您的json作为输入并生成专门创建用于与gson一起使用的pojo类。然后Gson会毫无问题地反序列化你的json。