我正在使用 Gson,遇到了序列化对象的问题:
java.lang.IllegalArgumentException: NaN is not a valid double
value as per JSON specification. To override this behavior,
use GsonBuilder.serializeSpecialFloatingPointValues() method.
at com.google.gson.Gson.checkValidFloatingPoint(Gson.java:296)
...
有没有办法让 Gson 打印它有问题的类名/字段名?我可以serializeSpecialFloatingPointValues()
按照建议使用该方法,但理想情况下我想了解我的对象在哪里有一个 NaN。
- - - - 更新 - - - - - - - -
在煞费苦心地走过这一步之后,我认为原因是一个不熟悉的替身。我的设置如下所示:
public class Foo {
private double price;
}
String jsonFromNet = ...;
Foo foo = Gson.fromJson(jsonFromNet);
Gson.toJson(foo, Foo.class); <-- throws the exception
我的 api 的返回 json 不包括属性“price”,所以我猜成员变量“d”未初始化。当我去序列化它时,gson 会抛出错误。
如果我在序列化之前给“价格”一个明确的值,或者它恰好在 api json 响应中,那么一切正常。
此外,如果我将“价格”从 double 更改为 float,它似乎并不介意未初始化的状态。
我现在将研究 GsonBuilder.serializeSpecialFloatingPointValues(),我只是想知道双精度如何在这种状态下被序列化。我可以使用默认值零或其他值。
谢谢