2

私のjson入力は次のようになります:

{ user: "sample-user", date : 1225864800 }

そして、私の DateDeserializer クラスは次のとおりです。

private class DateDeserializer implements JsonDeserializer<Date>
{
    public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
        throws JsonParseException
    {
        System.out.println("Deserializer...");
        return new Date(json.getAsJsonPrimitive().getAsLong());
    }
}

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());
gson.fromJson(new FileReader("input.json"), MyType.class);

すべてをセットアップした後でも、

java.text.ParseException: Unparseable Date: "1225864800"

私はここで何か悪いことをしていますか? 助けてください。

4

2 に答える 2

0

クラス全体のアダプターを作成して、MyType標準の日付の逆シリアル化を他の場所 (存在する場合) に保持し、特定の逆シリアル化を内部のみに制限することができますMyType

私が言いたいことをよりよく説明するために、コピーして貼り付けて実行できるコードを次に示します。

package stackoverflow.questions.q14197557;

import java.lang.reflect.Type;
import java.util.Date;

import com.google.gson.*;

public class Q14197557 {

    public static class MyType {

        String user;
        Date date;
        @Override
        public String toString() {
            return "MySample [user=" + user + ", date=" + date + "]";
        }

    }

    public static class MySampleDeserializer implements JsonDeserializer<MyType> {
        public MyType deserialize(JsonElement json, Type typeOfT,
                JsonDeserializationContext context) throws JsonParseException {

           if (json == null)
               return null;
           else {
               MyType s = new MyType();
               s.user = json.getAsJsonObject().get("user").getAsString();
               s.date = new Date(json.getAsJsonObject().get("date").getAsLong());
               return s;

           }

        }
    }

    public static void main(String[] args) {

        String json = "{ user: \"sample-user\", date : 1225864800 }";
        GsonBuilder gsonBuilder = new GsonBuilder();
        gsonBuilder.registerTypeAdapter(MyType.class, new MySampleDeserializer());
        MyType s = gsonBuilder.create().fromJson(json, MyType.class);

        System.out.println("My Type: " + s);
    }

}
于 2013-11-13T23:00:29.343 に答える
0

日付フィールドだけでなく、Json 構造全体を日付として逆シリアル化しようとしています。次のようなものが必要です。

  User user = jsonElement.getAsJsonObject().get( "user" ).getAsString();
  Date date = new Date(jsonElement.getAsJsonObject().get( "date" ).getAsLong());
于 2013-07-25T15:31:54.147 に答える