我有解决字符串到嵌套类的问题.这是我的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值.你有什么想法吗?
我收到一个带有Devices的列表,每个列表都包含Geography对象.该对象的参数为null / 0.我希望你明白.
@编辑@
我改变了
公共地理LastLocalization;
至
公共地图 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);
}
}
最佳答案
@SerializedName("LastLocalization")
public Geography LastLocalization;
这个定义告诉Gson你期望一个名为LastLocalization的Geography类型对象,并且你想将它存储在一个名为LastLocalization的成员中.
您的输入有一个对象数组,每个对象都包含一个名为LastLocalization的对象,该对象随后包含一个名为Geography的对象.
当Gson遇到JSON中的LastLocalization对象时,它也会通过明确注释看到它应该匹配您的LastLocalization成员,因此它会创建一个新的Geography对象并将其分配到那里.它创建了一个Geography对象,因为它是成员的类型 – 没有别的意义.但是,JSON LastLocalization对象属性都不匹配任何Java Geography对象属性,因此Geography只包含Java对象的默认值.
请注意,Gson不关心JSON对象的名称是否与Java对象不同,因为您的Java对象被明确注释为接收具有不同JSON名称的内容.