我有使用要序列化为 JSON 的枚举属性定义的 APEX 类。此外,我正在阅读 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 或从 JSON 转换时,我将如何采用适当的方式处理枚举?谢谢!