Files
weixin-java-tools/src/main/java/me/chanjar/weixin/util/json/WxMenuGsonAdapter.java

95 lines
3.5 KiB
Java
Raw Normal View History

2014-08-18 16:48:20 +08:00
/*
* KINGSTAR MEDIA SOLUTIONS Co.,LTD. Copyright c 2005-2013. All rights reserved.
*
* This source code is the property of KINGSTAR MEDIA SOLUTIONS LTD. It is intended
* only for the use of KINGSTAR MEDIA application development. Reengineering, reproduction
* arose from modification of the original source, or other redistribution of this source
* is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD.
*/
package me.chanjar.weixin.util.json;
2014-08-18 16:48:20 +08:00
import java.lang.reflect.Type;
import me.chanjar.weixin.bean.WxMenu;
2014-08-18 16:48:20 +08:00
import com.google.gson.JsonArray;
2014-08-21 21:19:24 +08:00
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
2014-08-18 16:48:20 +08:00
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
2014-08-21 21:19:24 +08:00
import com.google.gson.JsonParseException;
2014-08-18 16:48:20 +08:00
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
/**
*
* @author qianjia
*
*/
2014-08-21 21:19:24 +08:00
public class WxMenuGsonAdapter implements JsonSerializer<WxMenu>, JsonDeserializer<WxMenu> {
2014-08-18 16:48:20 +08:00
public JsonElement serialize(WxMenu menu, Type typeOfSrc, JsonSerializationContext context) {
JsonObject json = new JsonObject();
JsonArray buttonArray = new JsonArray();
for (WxMenu.WxMenuButton button : menu.getButton()) {
2014-08-21 21:19:24 +08:00
JsonObject buttonJson = convertToJson(button);
2014-08-18 16:48:20 +08:00
buttonArray.add(buttonJson);
}
json.add("button", buttonArray);
return json;
}
protected JsonObject convertToJson(WxMenu.WxMenuButton button) {
2014-08-18 16:48:20 +08:00
JsonObject buttonJson = new JsonObject();
2014-08-21 21:19:24 +08:00
buttonJson.addProperty("type", button.getType());
2014-08-18 16:48:20 +08:00
buttonJson.addProperty("name", button.getName());
2014-08-21 21:19:24 +08:00
buttonJson.addProperty("key", button.getKey());
buttonJson.addProperty("url", button.getUrl());
if (button.getSub_button() != null && button.getSub_button().size() > 0) {
2014-08-18 16:48:20 +08:00
JsonArray buttonArray = new JsonArray();
for (WxMenu.WxMenuButton sub_button : button.getSub_button()) {
2014-08-21 21:19:24 +08:00
buttonArray.add(convertToJson(sub_button));
2014-08-18 16:48:20 +08:00
}
buttonJson.add("sub_button", buttonArray);
}
return buttonJson;
}
2014-08-21 21:19:24 +08:00
public WxMenu deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
2014-08-21 22:13:13 +08:00
/*
* 操蛋的微信
* 创建菜单时是 { button : ... }
* 查询菜单时是 { menu : { button : ... } }
*/
2014-08-21 21:19:24 +08:00
WxMenu menu = new WxMenu();
2014-08-21 22:13:13 +08:00
JsonObject menuJson = json.getAsJsonObject().get("menu").getAsJsonObject();
JsonArray buttonsJson = menuJson.get("button").getAsJsonArray();
2014-08-21 21:19:24 +08:00
for (int i = 0; i < buttonsJson.size(); i++) {
JsonObject buttonJson = buttonsJson.get(i).getAsJsonObject();
WxMenu.WxMenuButton button = convertFromJson(buttonJson);
2014-08-21 21:19:24 +08:00
menu.getButton().add(button);
if (buttonJson.get("sub_button") == null || buttonJson.get("sub_button").isJsonNull()) {
continue;
}
JsonArray sub_buttonsJson = buttonJson.get("sub_button").getAsJsonArray();
for (int j = 0; j < sub_buttonsJson.size(); j++) {
JsonObject sub_buttonJson = sub_buttonsJson.get(j).getAsJsonObject();
button.getSub_button().add(convertFromJson(sub_buttonJson));
}
}
return menu;
}
protected WxMenu.WxMenuButton convertFromJson(JsonObject json) {
WxMenu.WxMenuButton button = new WxMenu.WxMenuButton();
2014-08-21 21:19:24 +08:00
button.setName(GsonHelper.getString(json, "name"));
button.setKey(GsonHelper.getString(json, "key"));
button.setUrl(GsonHelper.getString(json, "url"));
button.setType(GsonHelper.getString(json, "type"));
return button;
}
}