Web API不将bool返回类型序列化为json布尔值

时间:2014-08-26 18:11:28

标签: c# json angularjs asp.net-web-api boolean

我有这个ASP.NET Web API方法:

[HttpGet]
public bool IsCodeValid(string code)
{
    return db.Usagers.Any(u => u.CodeAcces == code);
}

我从Angularjs的$ http.get方法调用这个Web API方法:

return $http.get("/lewis/production/clockin/iscodevalid?code=" + code);

结果如下:

[object Object]{config: Object {...}, data: "false", status: 200, statusText: "OK"}

查看数据属性,该属性为“false”(作为字符串)。

我希望它是原始布尔值,所以,回到我的javascript客户端代码中,我可以做到

if (result.data) {
  // do something if the result is true ...
}

因为现在,我必须做这个丑陋的事情:

if (result.data == "true") {
}

我从自定义“userService”服务获得结果:

userService.isCodeValid($scope.code).then(function (result)
{
    console.log(result);
});

这是我的userService中的isCodeValid方法的代码:

angular.module('clockin').service('userService', ['$http',
    function ($http) {
        this.isCodeValid = function (code) {
            return $http.get("/lewis/production/clockin/iscodevalid?code=" + code);
        };
    }
]);

知道我缺少什么吗?

3 个答案:

答案 0 :(得分:13)

JSON是JS Object 表示法。你没有返回一个物体,只是一个布尔。如果没有将服务器响应主体包装在{ .. }中,则浏览器只能假定它从服务器获得的这个字符串实际上只是一个字符串。将服务响应包装在一个对象中,bool属性将被序列化为一个bool。

您甚至不需要为此目的定义新类:

[HttpGet]
public object IsCodeValid(string code)
{
    return new { result: db.Usagers.Any(u => u.CodeAcces == code) };
}

(然后相应地更改客户端)

另一种方法是修改JS以将字符串转换为bool。

答案 1 :(得分:0)

JSON就像XML一样简单的字符串数据(更紧凑)。您看到的结果是服务器返回的原始结果。当您通过JOTT解析器(如Newtonsoft.Json)处理该结果时,您将获得所期望的实际bool类型。

答案 2 :(得分:0)

通过插入匿名传输对象作为父项来移动元素:

 [HttpGet]
 public bool IsCodeValid(string code)
 {
     return new {isValid: db.Usagers.Any(u => u.CodeAcces == code)};
 }