Gson:日期上的JsonSyntaxException

我正在尝试使用Gson反序列化json数组,但是当前正在获取JsonSyntaxException。json字符串是由.NET MVC3

Web服务使用JsonResult创建的(意味着,我不是手动创建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)/

有人知道发生了什么吗?

回答:

我在这里找到了答案,但奇怪的是,没有一种更简单的方法。我使用过的其他几个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)。

以上是 Gson:日期上的JsonSyntaxException 的全部内容, 来源链接: utcz.com/qa/402803.html

回到顶部