我的安卓应用程序使用 flexjson 库来反序列化通过 RESTfull Web 服务从服务器接收的 json 数据字符串。但是在反序列化时出现错误。
Flexjson。JSONException: [ data.status ]: 不知道如何将Clock_in绑定到类 wfa.com.tma.wfa.type.TimeClockStatus. 您可能需要使用 ObjectFactory 而不是普通类。
这是我的字符串
{
"data":
{
"todayShift":
{
"startTime":"1970-01-01T13:30:00Z",
"endTime":"1970-01-02T00:00:00Z",
"office":
{
"id":1,"name":"Location Test 1"
}
},
"currentTime":"2017-10-12T07:47:11Z",
"status":"Clock_in",
"latestTime":"2017-10-12T07:46:13Z",
"latestOffice":{"id":1,"name":"Location Test 1"}},
"meta":{"type":"TimeClockDto"}
}
此字符串的 DTO
public class TimeClockDto implements Serializable
{
private static final long serialVersionUID = 1L;
private TodayShiftDto todayShift;
private String currentTime;
private TimeClockStatus status;
private String latestTime;
private BaseLocationDto latestOffice;
public TimeClockDto(TodayShiftDto todayShift, String currentTime,
TimeClockStatus status, String latestClockInTime,
BaseLocationDto latestOffice)
{
this.todayShift = todayShift;
this.currentTime = currentTime;
this.status = status;
this.latestTime = latestClockInTime;
this.latestOffice = latestOffice;
}
//getter, setter
}
'和反序列化代码
和枚举类
public enum TimeClockStatus
{
Clock_in, Clock_out;
}
我已经通过使用EnumObjectFactory
解决了这个问题
TimeClockDto result = new JSONDeserializer<TimeClockDto>
.use("data", TimeClockDto.class)
.use("data.todayShift", TodayShiftDto.class)
.use("data.status", new EnumObjectFactory())
.use("data.latestOffice", BaseLocationDto.class)
.deserialize(param.getResult(),TimeClockDto.class);