距離的.Net服務JSON飼料。我使用此代碼:
public class GsonHelper {
public static Gson createWcfGson() {
GsonBuilder gsonb = new GsonBuilder();
gsonb.registerTypeAdapter(Date.class, new WcfDateDeserializer());
Gson gson = gsonb.create();
return gson;
}
private static class WcfDateDeserializer implements JsonDeserializer<Date>, JsonSerializer<Date> {
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
String JSONDateToMilliseconds = "\\/(Date\\((.*?)(\\+.*)?\\))\\/";
Pattern pattern = Pattern.compile(JSONDateToMilliseconds);
Matcher matcher = pattern.matcher(json.getAsJsonPrimitive().getAsString());
String result = matcher.replaceAll("$2");
return new Date(new Long(result));
}
@Override
public JsonElement serialize(Date date, Type arg1, JsonSerializationContext arg2) {
return new JsonPrimitive("/Date(" + date.getTime() + ")/");
}
}
}
它註冊自定義的串行器和解串爲Date
類型。使用很簡單:Gson gson = GsonHelper.createWcfGson();
並做你想做的。
Upd:對不起,前面的例子不適用於時區。使用Calendar
來考慮時區偏移更容易。代碼如下所示:
public class GsonHelper {
public static Gson createWcfGson() {
GsonBuilder gsonb = new GsonBuilder();
gsonb.registerTypeAdapter(Date.class, new WcfCalendarDeserializer());
Gson gson = gsonb.create();
return gson;
}
public static class WcfCalendarDeserializer implements JsonDeserializer<Calendar>, JsonSerializer<Calendar> {
public Calendar deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
String JSONDateToMilliseconds = "\\/(Date\\((.*?)(\\+.*)?\\))\\/";
Pattern pattern = Pattern.compile(JSONDateToMilliseconds);
Matcher matcher = pattern.matcher(json.getAsJsonPrimitive().getAsString());
matcher.matches();
String tzone = matcher.group(3);
String result = matcher.replaceAll("$2");
Calendar calendar = new GregorianCalendar();
calendar.setTimeZone(TimeZone.getTimeZone("GMT" + tzone));
calendar.setTimeInMillis(new Long(result));
return calendar;
}
@Override
public JsonElement serialize(Calendar calendar, Type arg1, JsonSerializationContext arg2) {
return new JsonPrimitive("/Date(" + calendar.getTimeInMillis() + ")/");
}
}
}
那麼你可以使用恢復Calendar
對象,以獲取小時和分鐘(如果需要調整時區)。
calendar.get(Calendar.HOUR_OF_DAY);
calendar.get(Calendar.MINUTE);
他應該調整時區(+0200) – Selvin 2011-06-13 13:40:36
我不知道,如果I'm只是愚蠢,但我didn't得到這個工作 – Magnus 2011-06-13 14:26:04
對不起,在你的情況下,它不會工作。此代碼不適用於時區。稍後我會嘗試改變它。 – 2011-06-13 14:30:06