gpt4 book ai didi

java - Gson:日期上的 JsonSyntaxException

转载 作者:搜寻专家 更新时间:2023-10-30 20:56:34 26 4
gpt4 key购买 nike

我正在尝试使用 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)/

有人知道这是怎么回事吗?

最佳答案

我找到了答案 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)。

关于java - Gson:日期上的 JsonSyntaxException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12878693/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com