我有使用枚举属性定义的APEX类,这些属性将被序列化为JSON。此外,我正在阅读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];
}
}
}
APEX代码使用类序列化为JSON并从JSON反序列化:
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转换时,如何以合适的方式处理枚举?谢谢!
答案 0 :(得分:1)
基本上,您可以将字段标记为要被忽略的字段,以便序列化为JSON。