java – Gson:JsonSyntaxException on date
发布时间:2020-09-01 19:42:14 所属栏目:Java 来源:互联网
导读:我试图使用Gson反序列化一个json数组,但是我正在得到一个JsonSyntaxException. json字符串由使用JsonResult的.NET MVC3 Web服务创建(意思是,我不是手动创建json,它是由我知道在另外几个平台上工作的一个库创建的). 这是json: [{PostID:1,StudentID:39,Studen
我试图使用Gson反序列化一个json数组,但是我正在得到一个JsonSyntaxException. json字符串由使用JsonResult的.NET MVC3 Web服务创建(意思是,我不是手动创建json,它是由我知道在另外几个平台上工作的一个库创建的). 这是json: [{"PostID":1,"StudentID":39,"StudentName":"Joe Blow","Text":"Test message.","CreateDate":"/Date(1350178408267)/","ModDate":"/Date(1350178408267)/","CommentCount":0}] 这是代码: public class Post { public int PostID; public int StudentID; public String StudentName; public String Text; public Date CreateDate; public Date ModDate; public Post() { } } Type listOfPosts = new TypeToken<ArrayList<Post>>(){}.getType(); ArrayList<Post> posts = new Gson().fromJson(json,listOfPosts); 例外说,日期格式无效: com.google.gson.JsonSyntaxException: /Date(1350178408267)/ 任何人都知道发生了什么事 解决方法我发现一个答案 here,但我发现奇怪的是没有一个更简单的方法.我使用的其他几个json库本身支持.NET json格式.当Gson没有处理它时,我很惊讶.必须有更好的方法.如果有人知道,请在这里张贴.一切都是这样,这是我的解决办法:我创建了一个自定义的JsonDeserializer并将其注册为Date类型.通过这样做,Gson将使用我的解串器作为Date类型而不是默认值.如果您想以自定义方式序列化/反序列化,则可以对任何其他类型进行相同操作. public class JsonDateDeserializer implements JsonDeserializer<Date> { public Date deserialize(JsonElement json,Type typeOfT,JsonDeserializationContext context) throws JsonParseException { String s = json.getAsJsonPrimitive().getAsString(); long l = Long.parseLong(s.substring(6,s.length() - 2)); Date d = new Date(l); return d; } } 然后,当我创建我的Gson对象时: Gson gson = new GsonBuilder().registerTypeAdapter(Date.class,new JsonDateDeserializer()).create(); 现在我的gson对象将能够解析.NET日期格式(自1970年以来的millis). (编辑:甘南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |