序列化类型的对象

时间:2016-02-05 14:57:00

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

我想在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'.

从控制器返回数据:

enter image description here

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

2 个答案:

答案 0 :(得分:0)

像这样使用.net javascript serializer

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

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

答案 1 :(得分:0)

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

目前,您的控制器方法正常工作 - 因此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);
}

一旦您实际从控制器返回值然后,您将需要测试角度代码以查看它是否正常工作。