一尘不染

如何将以json字符串形式接收的.net DateTime解析为Java的Date对象

json

我正在DateTime通过我的asmx网络服务以json字符串形式接收.NET
对象,并尝试在gson库的帮助下对其进行解析。但是似乎不支持解析.net样式的DateTime。我如何Date使用Gson 轻松地将其解析为Java
对象?

我收到的字符串是这样的:

"DateOfBirth":"\/Date(736032869080)\/"

PS我不想在服务器端进行任何修改以接收DateTime作为Long值


阅读 265

收藏
2020-07-27

共1个答案

一尘不染

像这样:

String json = "\"\\/Date(736032869080)\\/\"";
Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new NetDateTimeAdapter()).create();
System.out.println("Date=" + gson.fromJson(json, Date.class));

class NetDateTimeAdapter extends TypeAdapter<Date> {
    @Override
    public Date read(JsonReader reader) throws IOException {
        if (reader.peek() == JsonToken.NULL) {
            reader.nextNull();
            return null;
        }
        Date result = null;
        String str = reader.nextString();
        str = str.replaceAll("[^0-9]", "");
        if (!TextUtils.isEmpty(str)) {
            try {
                result = new Date(Long.parseLong(str));
            } catch (NumberFormatException e) {
            }
        }
        return result;
    }
    @Override
    public void write(JsonWriter writer, Date value) throws IOException {
        // Nah..
    }
}

或改用此示例,并遵循“使用WCF Microsoft JSON日期处理”一章。

2020-07-27