我在对象数组中有一个int
值的状态属性。下面是对象数组的输出。
[
{
"enterpriseServiceId": 1,
"enterpriseServices": {},
"status": 3,
"id": 1,
"createdOn": "2017-12-29T17:58:15.4855946",
"createdBy": "System",
"modifiedOn": "2017-12-29T17:58:15.4855946",
"modifiedBy": "System"
},
{
"enterpriseServiceId": 2,
"enterpriseServices": {},
"status": 1,
"id": 2,
"createdOn": "2017-12-29T17:58:15.4855946",
"createdBy": "System",
"modifiedOn": "2017-12-29T17:58:15.4855946",
"modifiedBy": "System"
}
]
status
属性是枚举值类型。我试图将其转换为字符串值,以便在输出中返回时更容易阅读。
以下是我从sql server数据库获取数据的代码。
ENUM
namespace CoreLibrary.Models.Enums
{
public static class Common
{
public enum Status
{
Active = 1,
InActive,
Completed,
Failed,
InProgress,
Pause,
Resume,
Skip,
Running
}
}
}
实体型号:
namespace CoreLibrary.Models.Entities
{
public class Deployments : BaseProperties
{
public int EnterpriseServiceId { get; set; }
[ForeignKey("EnterpriseServiceId")]
public virtual EnterpriseServices EnterpriseServices { get; set; }
public Common.Status Status { get; set; }
}
}
从数据库中检索数据的方法:
[HttpGet("~/api/Deployments/GetWithJoins")]
public JsonResult GetWithJoins()
{
try
{
// includeList for including data from external tables (JOIN Query)
var includeList = new List<Expression<Func<Deployments, object>>>();
includeList.Add(d => d.EnterpriseServices);
IEnumerable<Deployments> result = _repository.GetByIdWithJoins(queryable: includeList).ToList();
return Json(result);
}
catch (Exception ex)
{
var innerException = ex.InnerException == null ? null : ex.InnerException.Message.ToString();
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Json(new { status = "failed", message = ex.Message.ToString(), innerException = innerException });
}
}
结果变量返回我在本文最开头分享的输出。我正在尝试将status
转换为返回string
值,而不是int
。
我不确定这是否可能,或者是将status
int输出到字符串值的正确方法?
我在网上尝试过,但我没有找到解决方案。我很感激你们给予的任何帮助。 :)
答案 0 :(得分:2)
当我们致电JSON(someObject)
时,ASP.NET会使用其JavaScriptSerializer
来创建JsonResult
。 JavaScriptSerializer
的默认配置将枚举转换为其整数表示。
我们可以将序列化程序配置为使用枚举的字符串表示。这里有详细说明:JSON serialization of enum as string
如果该方法没有吸引力,那么您可以使用LINQ使用Enum.ToString()
映射到匿名对象。 Here is an example:
var result = deployments.Select(x =>
{
return new
{
Status = x.Status.ToString(),
x.EnterpriseServiceId
};
});
虽然LINQ方法可行,但从长远来看可能会导致维护问题。