我有用要枚舉到JSON中的枚舉屬性定義的APEX類。另外,我正在閱讀JSON並將它們反序列化回我定義的類。APEX ENUM從JSON序列化到並反序列化
要使枚舉屬性與JSON轉換一起工作,我創建了另一個Integer屬性,該屬性獲取枚舉的序號並根據枚舉的值列表設置枚舉。見下文:
枚舉定義:
public enum DataSourceType {
NA,
ArbitronSummary,
ArbitronTally,
NielsenSummary,
NielsenTally,
Scarborough,
Strata,
None
}
public enum FilterJoinType {
AndJoin,
OrJoin,
NotJoin
}
public enum HourByHourInterval {
NA0,
NA1,
Quarterly,
NA3,
Hourly
}
APEX類定義:
public class HourByHourRequest {
public List<String> Books { get; set; }
public DataSourceType eDataSource { get; set; }
public Integer DataSource {
get {
if (eDataSource == null)
return 0;
return eDataSource.ordinal();
}
set {
eDataSource = lib_ap.DataSourceType.values()[value];
}
}
public FilterJoinType eFilterJoinType { get; set; }
public Integer FilterJoinType {
get {
if (eFilterJoinType == null)
return 0;
return eFilterJoinType.ordinal();
}
set {
eFilterJoinType = lib_ap.FilterJoinType.values()[value];
}
}
public HourByHourInterval eInterval { get; set; }
public Integer Interval {
get {
if (eInterval == null)
return 0;
return eInterval.ordinal();
}
set {
eInterval = lib_ap.HourByHourInterval.values()[value];
}
}
}
使用類序列化到JSON和反序列化從JSON
APEX代碼:
HourByHourRequest request = new HourByHourRequest();
request.Books = new List<String>();
request.Books.add('BookName');
request.eDataSource = DataSourceType.ArbitronTally;
request.eFilterJoinType = FilterJoinType.AndJoin;
request.eInterval = HourByHourInterval.Hourly;
String jsonStr = JSON.serialize(request);
HourByHourRequest request2 = (HourByHourRequest)JSON.deserialize(request, HourByHourRequest.class);
的爲什麼我使用Integer屬性去與每個枚舉屬性是因爲在序列化到JSON的枚舉值丟失。因此,具有相應的Integer值可以保留JSON中的值,可以成功反序列化...除了上面顯示的代碼。由於每個枚舉/整數字段對的「重複字段」錯誤,上面的代碼實際上在反序列化部分會失敗。序列化時,枚舉和整型字段都將包含在JSON字符串中,即使只有整數字段保留該值。
樣品JSON:
{"Interval":4,
"eInterval":{},
"FilterJoinType":0,
"eFilterJoinType":{},...
我的問題:有沒有辦法忽略序列化到JSON領域?這將解決「重複字段」錯誤。否則,轉換爲/從JSON轉換時如何處理枚舉的適當方式?謝謝!