You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVC返回JSON字符串至Angular无法解析,如何转为可操作对象?

解决Angular获取MVC接口返回的JSON字符串而非可操作对象问题

我遇到过类似的问题,这大概率是双重JSON序列化导致的问题,咱们一步步来拆解和解决:

问题根源

你在控制器的GetApplications方法里,先调用REST API拿到了已经是JSON格式的字符串,然后直接把这个字符串传给JsonResult返回。但JsonResult的作用是把.NET对象序列化为JSON字符串,所以它会把你传入的JSON字符串再做一次序列化——结果就是前端拿到的不是可解析的JSON对象,而是一个被转义过的字符串(虽然浏览器控制台里转义符没显示,但本质还是字符串,自然没法直接访问属性或用ng-repeat遍历)。

两种解决方案

方案一:直接返回ContentResult(推荐,适合不想反序列化的场景)

既然已经拿到了现成的JSON字符串,我们不需要再让JsonResult做二次序列化,直接用ContentResult返回,指定内容类型为application/json即可:

public ActionResult GetApplications()
{
    // 调用REST API获取JSON字符串的逻辑
    string rawJson = YourRestApiCallMethod();
    
    // 直接返回原始JSON,指定内容类型
    return Content(rawJson, "application/json");
}

方案二:先反序列化为.NET对象再返回(适合需要在后端处理数据的场景)

如果需要在后端对返回的数据做修改或校验,可以先把REST API返回的JSON字符串反序列化为.NET对象列表,再用JsonResult返回,这样JsonResult会正确地把对象序列化为JSON:

using Newtonsoft.Json; // 需要引用Newtonsoft.Json包

// 先定义对应实体类,和REST API返回的JSON结构匹配
public class Application
{
    public string Firstname { get; set; }
    // 其他属性根据实际JSON结构添加
}

public ActionResult GetApplications()
{
    string rawJson = YourRestApiCallMethod();
    
    // 反序列化为对象列表
    List<Application> applications = JsonConvert.DeserializeObject<List<Application>>(rawJson);
    
    // 这里可以对applications做额外处理(比如过滤、修改属性等)
    
    // 返回JsonResult,自动序列化对象为JSON
    return Json(applications, JsonRequestBehavior.AllowGet);
}

前端验证修改效果

修改后端接口后,Angular的$http.get调用就能拿到可直接操作的对象数组了:

$http.get('/YourController/GetApplications')
    .then(function(response) {
        $scope.applications = response.data;
        // 现在可以直接访问属性
        console.log(response.data[0].Firstname);
        // 也能正常用ng-repeat遍历
        // <div ng-repeat="app in applications">{{app.Firstname}}</div>
    });

为什么之前传数组成功?

之前能成功传输数组,应该是你当时直接返回的是.NET原生数组(比如List<T>),JsonResult直接把对象序列化为JSON,没有二次序列化的问题;而这次是先拿到了JSON字符串再返回,才触发了双重序列化的坑。

内容的提问来源于stack exchange,提问作者Vereonix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:21:09