JsonResults返回Enum值而不是字符串表示

本文关键字:字符串 表示 返回 Enum JsonResults | 更新日期: 2023-09-27 18:15:59

在我的客户端,我有一个ajax调用如下:

          $.ajax({
                url: "Controller/ListResult",
                type: 'POST',
                contentType: "application/json;charset=utf-8",
                data: JSON.stringify({
                    Id: ObjectId,
                    SessionKey: sessionManager.getSessionKey()
                }),
                dataType: "json",
                success: function (result) {
                var test = results;
                    }
                }
            });

在控制器中我有一个这样的方法:

      [HttpPost]
       public JsonResult ListResult(string Id, string SessionKey)
       {
        IBl biz = new BL();
        var result = biz.GetResults(Id,SessionKey);
        return Json(result);
       }

问题是控制器返回的结果是一个具有Enum属性的对象(其字符串表示为值)。然而,当到达ajax调用中的success函数时,枚举不再是字符串表示,而是被转换为它们的int值。我怎样才能避免这种情况呢?并将字符串表示保留在javascript端。

JsonResults返回Enum值而不是字符串表示

而不是返回var result创建一些结果实体类,你可以用StringEnumConverter标记enum属性。

class Result
{
  [JsonConverter(typeof(StringEnumConverter))]
  public EnumType EnumProperty { get; set; }
  *****other properties goes here****
}

正如Stephen所建议的,如果使用Json.NET作为序列化器,则可以使用

试试这样:

    var result = biz.GetResults(Id,SessionKey);
    var modifiedResult = new
      {
        ...,
        r.EnumValue.ToString(),
        ...
      };
    return Json(modifiedResult);