【问题标题】:Why $http.get to the Json(new MyComlexObject...) web api controller return object Object?为什么 $http.get 到 Json(new MyComlexObject...) web api 控制器返回对象对象?
【发布时间】:2017-01-06 21:44:20
【问题描述】:

我有简单的 web api

[HttpGet]
        public JsonResult<LocationDataObject> GetLocationData(string absPath)
        {
            var subdirectoriesInfos = GetDirectoryInfos(absPath);
            var response = new LocationDataObject(
                    new List<DirectoryInfo>(subdirectoriesInfos.Where(si => si.CalculateSize() <= 100000).Select(si => si)),
                    new List<DirectoryInfo>(subdirectoriesInfos.Where(si => (si.CalculateSize() > 100000 && si.CalculateSize() < 500000)).Select(si => si)),
                    new List<DirectoryInfo>(subdirectoriesInfos.Where(si => si.CalculateSize() > 10000000).Select(si => si)),
                    GetFileInfos(absPath));
            return Json(response);
        }.

当我这样做时:

$http.get('api/browsingdata/GetLocationData?absPath=' + currentLocation.FullPath)
                .then(
                    function (response) {
                        $scope.subdirectories_1 = response.data.Lt10mb;
                        $scope.subdirectories_2 = response.data.Between10mbAnd50mb;
                        $scope.subdirectories_2 = response.data.Gt100mb;

                        alert(response);
});

结果是object Object,它没有LocationDataObject 的属性。我在这里做错了什么?

【问题讨论】:

  • 更好的是使用“console.log(response);”比alert(response),你会得到想法,别忘了看“console”

标签: angularjs json asp.net-mvc asp.net-web-api


【解决方案1】:

您的 LocationDataObject 是 Object,这就是它显示 [object object] 的原因。

如果你想使用LocationDataObject 作为属性,那么使用

var response = new{LocationDataObject = new LocationDataObject(
                    new List<DirectoryInfo>(subdirectoriesInfos.Where(si => si.CalculateSize() <= 100000).Select(si => si)),
                    new List<DirectoryInfo>(subdirectoriesInfos.Where(si => (si.CalculateSize() > 100000 && si.CalculateSize() < 500000)).Select(si => si)),
                    new List<DirectoryInfo>(subdirectoriesInfos.Where(si => si.CalculateSize() > 10000000).Select(si => si)),
                    GetFileInfos(absPath))
};
return Json(response);

那么你可以使用

response.LocationDataObject

如果您仍然感到困惑,请放置调试点或使用console.log(response); 而不是alert 并在控制台上检查

【讨论】:

    【解决方案2】:

    我猜object Object 会打印到警报中。或者您可能需要澄清您的问题。

    对象将在警报中进行字符串化,因此任何没有toString() 方法的对象都将显示为object Object。如果必须,请使用console.log 打印您的回复,因为它会显示实际对象,而不是字符串化对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多