我创建了一个ASP.NET MVC 4 Web应用程序。在这个应用程序中我实现了几个休息web服务,这里有我的问题:是否可以强制对象序列化使用枚举实体名称而不是它们的值?
这是我的枚举:
public enum ReturnCode { OK, InvalidParameter }
这就是我得到的:
{
"returnCode": 0,
"data": null
}
但这就是我想要的:
{
"returnCode": OK,
"data": null
}
有没有办法实现这个目标?
答案 0 :(得分:4)
您可以使用JsonConverter。
此问题中提到的JSON.Net StringEnumConverter
有一个原生的JSON serialization of enum as string
要么对你的财产进行anotate:
[JsonConverter(typeof(StringEnumConverter))]
public enum ReturnCode { OK, InvalidParameter }
或者使用WebApi Json.NET custom date handling中的配置示例在全局序列化设置中注册。
答案 1 :(得分:0)
如果不更好地了解您的使用模式,很难提出建议......但不能少。
将枚举设为私有字段。
使用getter构建一个公共字符串属性,该getter返回私有枚举字段的实体名称和使用Enum.Parse设置私有字段值的setter
答案 2 :(得分: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;
}
}
}
所以现在你可以将enum的值作为字符串传递(从服务器和客户端两个方向),即:
{
"returnCode": "OK",
"data": null
}
或
{
"returnCode": "InvalidParameter",
"data": null
}