如下代码:
data class Outer(val name: String, val inner: Inner?)
data class Inner(val name: String?)
fun main() {
val oriObj = Outer("Cmd", Inner(null))
println(oriObj) // Outer(name=Cmd, inner=Inner(name=null))
val json = JSON.toJSONString(oriObj)
println(json) // {"inner":{},"name":"Cmd"}
val resObj = JSON.parseObject(json, Outer::class.javaObjectType)
println(resObj) // Outer(name=Cmd, inner=null)
}
输出分别为:
Outer(name=Cmd, inner=Inner(name=null))
{"inner":{},"name":"Cmd"}
Outer(name=Cmd, inner=null)
可以看到序列化是没问题的,但反序列化时inner却为空,而不是期望的Inner(name = null)
但在类似的java代码中:
public class Tester {
private static class Outer {
public String name;
public Inner inner;
@Override
public String toString() {
return "Outer(name: " + name + ", inner: " + inner + ")";
}
}
private static class Inner {
public String name;
@Override
public String toString() {
return "Inner(name: " + name + ")";
}
}
public static void main(String[] args) {
Outer oriObj = new Outer();
oriObj.name = "Cmd";
oriObj.inner = new Inner();
System.out.println(oriObj); // Outer(name: Cmd, inner: Inner(name: null))
String json = JSON.toJSONString(oriObj);
System.out.println(json); // {"inner":{},"name":"Cmd"}
Outer resObj = JSON.parseObject(json, Outer.class);
System.out.println(resObj); // Outer(name: Cmd, inner: Inner(name: null))
}
}
输出分别为:
Outer(name: Cmd, inner: Inner(name: null))
{"inner":{},"name":"Cmd"}
Outer(name: Cmd, inner: Inner(name: null))
可以看到java中的序列化与反序列化是没有问题且符合预期的
- fastjson: 1.1.70.android
- kotlin: 1.3.11
1条答案
按热度按时间3vpjnl9f1#
Seems, it resolved in
1.1.71.android
. Kotlin version is1.3.30
.