将状态值从int更改为string

时间:2017-12-30 01:16:11

标签: c# asp.net .net enums asp.net-core-mvc

我在对象数组中有一个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输出到字符串值的正确方法?

我在网上尝试过,但我没有找到解决方案。我很感激你们给予的任何帮助。 :)

1 个答案:

答案 0 :(得分:2)

当我们致电JSON(someObject)时,ASP.NET会使用其JavaScriptSerializer来创建JsonResultJavaScriptSerializer的默认配置将枚举转换为其整数表示。

我们可以将序列化程序配置为使用枚举的字符串表示。这里有详细说明: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方法可行,但从长远来看可能会导致维护问题。