【发布时间】:2016-02-22 00:59:47
【问题描述】:
我在将字符串解析为嵌套类时遇到问题。这是我的 json 字符串:
[
{
"DeviceName":"devtest",
"StolenFlag":false,
"BatteryLevel":2,
"LastLocalization":{
"Geography":{
"CoordinateSystemId":4326,
"WellKnownText":"POINT (52.403371 16.955098)"
}
}
},
{
"DeviceName":"testdev2",
"StolenFlag":false,
"BatteryLevel":2,
"LastLocalization":{
"Geography":{
"CoordinateSystemId":4326,
"WellKnownText":"POINT (16.955098 52.403371)"
}
}
}
]
我的课:
class Geography implements Parcelable{
@SerializedName("CoordinateSystemId")
public int CoordinateSystemId;
@SerializedName("WellKnownText")
public String WellKnownText;
....
}
class MyDevice implements Parcelable{
@SerializedName("DeviceName")
public String DeviceName;
@SerializedName("StolenFlag")
public Boolean StolenFlag;
@SerializedName("BatteryLevel")
public int BatteryLevel;
@SerializedName("LastLocalization")
public Geography LastLocalization;
...
}
以及转换代码:
Gson gson = new Gson();
List<MyDevice> MyDev = gson.fromJson(result, new TypeToken<List<MyDevice>>() {
}.getType());
由于 Device 的参数已正确转换,因此我在 Device 内的 Geography 对象中获得了 null/0 值。你有什么想法为什么?
我收到一个包含设备的列表,每个都包含地理对象。该对象的参数为 null/0。希望你能理解。
@EDIT@
我变了
public Geography LastLocalization;
至
public Map<String, Geography> LastLocalization;
它工作正常,但在 writeToParcel 方法中出现错误。任何想法如何解决它?
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(DeviceName);
dest.writeByte((byte) (StolenFlag ? 1 : 0));
dest.writeInt(BatteryLevel);
dest.writeParcelable(LastLocalization, 0);
}
}
【问题讨论】:
-
还有一个你没有考虑到的额外级别:
LastLocalization不是Geography对象,它是一个具有Geography字段的对象,它是Geography对象. -
我明白,但是在我的服务器设备类只有一个地理对象时怎么可能呢?太奇怪了。
-
将
public Geography LastLocalization;更改为public Map<String, Geography> LastLocalization; -
现在工作得很好——我得到了价值。但是现在我在设备的 writeToParcel 方法中遇到了
dest.writeParcelable(LastLocalization, 0);的错误。不知道如何解决这个问题,因为我需要实现这个接口。 -
试试
dest.writeParcelable(LastLocalization.get("Geography"), 0);