【问题标题】:Serializing an object of type序列化类型的对象
【发布时间】:2016-05-15 14:30:13
【问题描述】:

我想在 MVC4 中实现 AngularJS。如何在 mvc4 中以 angular 格式返回 JSON。

这是我的代码:

控制器:

        [HttpGet]
        public ActionResult sample1() 
        {

            return Json(db.Account_Info.ToList(), JsonRequestBehavior.AllowGet);
        }

Account.js

App.controller('Account', ['$scope', '$http', '$timeout', function ($scope, $http, $timeout)
{
    $scope.bag = [];
    $scope.alldata = function ()
    {
        //
        $http.get('/Accounts/sample1').then(function ($response)
        {
            $scope.bag = $response;

        });


    }

    //execute on the page load
    $timeout(function ()
    {
        $scope.alldata();
    });
}]);

App.js

var App = angular.module('MyApp', []);

查看:

<script src="~/Scripts/angular/angular.min.js"></script>
<script src="~/Scripts/angular/App.js"></script>
<script src="~/Scripts/angular/Account.js"></script>
<h2>sample</h2>
<div ng-app="MyApp" >
    <div ng-controller="Account">
        <div ng-repeat="acc in bag">
            <p>Username: {{acc.username}}</p>
        </div>
    </div>

</div>

现在,我遇到了这个错误:

A circular reference was detected while serializing an object of type 'System.Data.Entity.DynamicProxies.Account_Info_D9C702CA15FC076225862589F60CD5E8B8EA615EF98D78A1FEB764E267D88F97'.

从控制器返回数据:

需要建议和帮助。提前致谢。

【问题讨论】:

  • 您的错误与角度无关。你有一些东西和对象/类在循环引用中,比如 A -> B,B -> C,C-> A。
  • 我将如何解决这个错误?我应该在控制器中做什么?
  • 你试过this吗?您还使用什么 Json 序列化程序?如果您不知道,请阅读 this 在任何情况下您都应该解决依赖关系
  • 是的,我已经尝试了所有这些但仍然没有显示数据
  • 我返回的是数据列表,而不仅仅是一行。

标签: javascript angularjs json asp.net-mvc-4 json.net


【解决方案1】:

像这样使用 .net javascript serializer

return new JavaScriptSerializer().Deserialize<List<Account_Info>>(db.Account_Info.ToList());

反序列化采用泛型。检查您的模型类型。我以为这是一个 Account_Info 列表。

【讨论】:

    【解决方案2】:

    您正在处理 2 个不同的问题。

    目前,您的控制器方法工作 - 因此您的 Angular 代码不会按预期工作。

    在服务器端,当您尝试将对象序列化为 JSON 时,您会看到一个错误。添加 Newtonsoft JSON 序列化程序之类的内容会有所帮助。

    控制器方法将如下所示:

    [HttpGet]
    public ActionResult sample1() 
    {
        var result = Newtonsoft.Json.JsonConvert.SerializeObject(db.Account_Info.ToList(), 
                        new Newtonsoft.Json.JsonSerializerSettings 
                        { 
                            ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize 
                        });
        return Json(result, JsonRequestBehavior.AllowGet);
    }
    

    一旦您真正从控制器返回值那么您将需要测试您的角度代码以查看它是否工作。

    【讨论】:

      猜你喜欢
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      相关资源
      最近更新 更多