1

我有使用要序列化为 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 转换时,我将如何采用适当的方式处理枚举?谢谢!

4

1 回答 1

2

在https://salesforce.stackexchange.com/questions/18498/apex-enum-serialize-to-and-deserialize-from-json得到了答案。

基本上,您可以将字段标记为瞬态以忽略序列化为 JSON。

于 2013-10-21T20:14:45.187 回答