2013-10-18 59 views
1

我有用要枚舉到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轉換時如何處理枚舉的適當方式?謝謝!

回答