Force Framework to use Enum Entity Name instead of its Value
本问题已经有最佳答案,请猛点这里访问。
我创建了一个ASP.NET MVC 4 Web应用程序。在这个应用程序中,我实现了几个RESTWebServices,这里出现了我的问题:是否可以强制对象序列化使用枚举实体名而不是它们的值?
这是我的枚举:
1 | public enum ReturnCode { OK, InvalidParameter } |
这就是我得到的:
1 2 3 4 | { "returnCode": 0, "data": null } |
但这正是我想要的:
1 2 3 4 | { "returnCode": OK, "data": null } |
有没有办法做到这一点?
您可以使用JSonConverter。
在这个问题中,json.net
请注明您的财产:
1 2 |
或者使用webapi json.net自定义日期处理中的配置示例在全局序列化程序设置中注册。
是的,你能做到。您需要声明附加的字符串属性,并在序列化/反序列化时使用它。
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [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; } } } |
因此,现在可以将枚举值作为字符串(从服务器和客户机两个方向)传递,即:
1 2 3 4 | { "returnCode":"OK", "data": null } |
或
1 2 3 4 | { "returnCode":"InvalidParameter", "data": null } |
如果没有更好地理解您的使用模式,很难提出建议……但同样如此。
使枚举成为私有字段。
使用getter(返回私有枚举字段的实体名称)和setter(使用enum.parse设置私有字段值)生成公共字符串属性