2010-10-06 44 views
2

我使用POST方法访问Web服务。我需要向服务器发送一个json序列化对象。在我的Android类中,我有一些字符串字段和一个日期字段。该日期字段被序列化这样的:gson序列化MS WCF兼容表格中的日期字段

.... TouchDateTime":"Oct 6, 2010 5:55:29 PM"}" 

,但要与Web服务兼容,我需要有它喜欢:

"TouchDateTime":"\/Date(928138800000+0300)\/" 

我发现了大约反序列化的有趣的文章在这里:http://benjii.me/2010/04/deserializing-json-in-android-using-gson/我认为我需要做这样的事情。你能帮我一把吗?

+0

此外,你可以在这里看到:http://stackoverflow.com/questions/206384/how-to-format-a-json-date – Cody 2011-12-28 18:36:44

+0

我用http://stackoverflow.com/a/ 2453820/8524获取上述的TimeZone偏移量。你是怎么做到的? – Diederik 2012-05-30 14:55:48

回答

8

如果有人需要它,这里是我是如何做到的。 1.创建一个新的类DateSerializer,并把它:

import java.lang.reflect.Type; 
import java.util.Date; 
import com.google.gson.JsonElement; 
import com.google.gson.JsonPrimitive; 
import com.google.gson.JsonSerializationContext; 
import com.google.gson.JsonSerializer; 

public class DateSerializer implements JsonSerializer<Object> 
{ 
    public JsonElement serialize(Date date, Type typeOfT, JsonSerializationContext context) 
    { 
     return new JsonPrimitive("/Date(" + date.getTime() + ")/"); 
    } 

    public JsonElement serialize(Object arg0, Type arg1, 
      JsonSerializationContext arg2) { 

     Date date = (Date) arg0; 
     return new JsonPrimitive("/Date(" + date.getTime() + ")/"); 
    } 
} 

这里是我如何使用它:

public static JSONObject Object(Object o){ 
    try { 
     GsonBuilder gsonb = new GsonBuilder(); 
     DateSerializer ds = new DateSerializer(); 
     gsonb.registerTypeAdapter(Date.class, ds); 
     Gson gson = gsonb.create(); 


     return new JSONObject(gson.toJson(o)); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 
+0

我可以问为什么添加“日期()”和/字符?我已经在众多的例子中看到了它,但我无法将它包裹起来。为什么不把毫秒数作为一个数字?谢谢 – JayPea 2011-11-14 21:26:05

+0

@JayPea,因为这是延迟的WCF .NET DateTime格式的一部分。如果您以JSON的形式看到它,那么API可能也会以其他方式出现异常迟缓。 – straya 2015-08-05 01:12:02