2013-01-24 42 views
1

我創建了一個ASP.NET MVC 4 Web應用程序。在這個應用程序中,我實現了幾個其他的webservices,這裏出現了我的問題:是否可以強制對象序列化使用枚舉實體名稱而不是它們的值?強制框架使用枚舉實體名稱而不是其值

這是我的枚舉:

public enum ReturnCode { OK, InvalidParameter } 

這就是我得到:

{ 
    "returnCode": 0, 
    "data": null 
} 

但是這就是我想要的:

{ 
    "returnCode": OK, 
    "data": null 
} 

有沒有辦法實現這個?

+0

只需添加另一個返回枚舉的字符串版本的屬性即可。 – Candide

+2

http://stackoverflow.com/questions/2441290/json-serialization-of-c-sharp-enum-as-string – adt

回答

0

在沒有更好地理解您的使用模式的情況下很難提出建議...但無論如何。

使枚舉成爲私有字段。

建一個公共字符串屬性與返回私有枚舉字段的實體名稱的getter和它使用Enum.Parse設置專用字段值

0

是的,你可以做一個二傳手。你需要聲明額外的字符串屬性,並在序列化/反序列化時使用它。

實施例:

[DataContract] 
public class MyResource 
{ 
    [DataMember] 
    public string Data { get; set; } 

    public ReturnCode Code { get; set; } 

    [DataMember(Name = "returnCode")] 
    string ReturnCodeString 
    { 
     get { return this.Code.ToString(); } 
     set 
     { 
      ReturnCode r; 
      this.Code = Enum.TryParse(value, true, out r) ? r : ReturnCode.OK; 
     } 
    } 
} 

所以現在你可以(從服務器並從客戶端在這兩個方向)通過枚舉的值作爲字符串即:

{ 
    "returnCode": "OK", 
    "data": null 
} 

{ 
    "returnCode": "InvalidParameter", 
    "data": null 
}