【问题标题】:Change status value from int to string将状态值从 int 更改为 string
【发布时间】:2017-12-30 01:16:10
【问题描述】:

我在对象数组中有一个带有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 数据库中获取数据的代码。

枚举

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 输出为字符串值的正确方法?

我在网上试过,但我没有找到满足我要求的解决方案。我将不胜感激你们可以提供的任何帮助。 :)

【问题讨论】:

  • 您可以简单地将 int 转换为枚举?正如这里已经讨论过的:stackoverflow.com/questions/29482/cast-int-to-enum-in-c-sharp
  • 嗯,它更像是一个单一的 int 到字符串。如何在不迭代每个对象以更新 status 的情况下转换对象数组?
  • 你的类部署是内部生成的吗?
  • 嗯,它是我为模型创建的一个类。我希望这能回答问题?
  • 你可以简单地在那个类中有一个字符串属性:public string StatusText { get { return Status.ToString(); } }

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


【解决方案1】:

当我们调用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 方法可行,但从长远来看,它可能会导致维护问题。

【讨论】:

  • 第一种方法效果很好。我能够检索带有status 的字符串值的json。也感谢您提供替代选项。
猜你喜欢
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 2017-02-11
  • 2014-01-24
相关资源
最近更新 更多