JSON 从 MVC 发送到 AgularJS 时在 .data 中收到大量字符串

JSON received as massive string in .data when sent to AgularJS from MVC

我从 Restful API 得到一个 JSON 结果,并确保结果在 MVC 控制器方法中是 JSON,如下所示:

public JsonResult GetApplications()
        {
            string appsRAW;
            HttpWebRequest GETRequest = (HttpWebRequest)WebRequest.Create("http://apiurl.com/Api/Application/FullDetails");
            GETRequest.Method = "GET";
            GETRequest.Headers.Add("X-ApiKey", "key123");
            String username = "username";
            String password = "password";
            String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
            GETRequest.Headers.Add("Authorization", "Basic " + encoded);
            HttpWebResponse response = GETRequest.GetResponse() as HttpWebResponse;
            using (Stream responseStream = response.GetResponseStream())
            {
                StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
                appsRAW=reader.ReadToEnd();            
            }            
            JsonResult applicationsJSON = Json(appsRAW, JsonRequestBehavior.AllowGet);

            return applicationsJSON;
        }

然后我在 Angular 中调用它使用:

$scope.applicationList;
    $http.get("/Home/GetApplications").then(function (result) {
        console.log(result);        
    });

然而,在 .data 的控制台输出中,来自 api 调用的所有 JSON 都在那里,但存储为一个长字符串,字面上存储为...

data: "[{"Id":"a2ac8e01-3a5d-4110-8afe-2bde09a4f03b","Firstname":"John","Lastname":"Berry" ... etc. etc.

所以我无法通过 result.data.Firstname 引用这些值,或者 ng-repeat 通过申请人对象并显示每个字段值。

也不确定是否重要,在调试和检查 C# 方法时,.data 在每个字段名称和值前后都带有“\”,但在浏览器的控制台中查看时检查它们消失了。

我已经成功地将数组从 C# 方法发送到 angular,并且能够通过 .data[0] .data[1] 等进行访问。这是第一次尝试发送实际的 JSON 从 MVC 到 angular 的对象列表。

您应该能够对返回的数据调用 JSON.parse 以将字符串变回对象。试试这个:

JSON.parse(result.data)

您可以使用 angular.fromJson.

解析 Angular 中的 JSON 字符串

尝试:

$scope.applicationList;
$http.get("/Home/GetApplications").then(function (result) {
    var parsedData = angular.fromJson(result.data);
});

或者,为了更好地衡量,在普通 JS 中:

var parsedData = JSON.parse(result.data);