A circular reference was detected while serializing an object of type 'System.Reflection
ajax, asp.net, asp.net-mvc-3, jquery, json
Solution
how can I parse the collection in ajax success. I changed success to following but it is not adding rows in table.
You are returning a collection with the following fields: `Id`, `DialPrefix`, `Rate`, and you are not using them.
var row = $('<tr>');
for(var i = 0; i < data.length; i++) {
row.append($('<td>').html(data[i]));
}
$('#results').append(row);
You need to add them to your loop:
row.append($('<td>').html(data[i].DialPrefix));
row.append($('<td>').html(data[i].Rate));
Problem
I have an asp.net MVC 3 controller action method like this: ``` public JsonResult GetRecordingRates(int Id) { List<DefaultRateChart> defaultRateCharts = new List<DefaultRateChart>(); using (IDefaultRateChartManager defaultRateChartManager = new ManagerFactory().GetDefaultRateChartManager()) { defaultRateCharts = defaultRateChartManager.GetAll().Where(rc => rc.Currency.Id == Id && (!rc.NumberPrefix.StartsWith("#") || rc.NumberPrefix.StartsWith("Default")) && rc.AccountCredit == "Credit").ToList(); } return Json(defaultRateCharts); } ``` I want to send this list to jquery ajax success method but I am getting 500 Internal Server Error my ajax call is like this: ``` $.ajax({ type: "POST", dataType: "json", url: "/Home/GetRecordingRates", data: { Id: $("#hdCurrencyId").val() }, success: function (data) { alert(data); } }); ``` In firebug XHR under response tab, it says: A circular reference was detected while serializing an object of type 'System.Reflection.RuntimeModule'. [EDIT] I changed the action method to this: ``` public JsonResult GetRecordingRates(int Id) { List<DefaultRateChart> defaultRateCharts = new List<DefaultRateChart>(); using (IDefaultRateChartManager defaultRateChartManager = new ManagerFactory().GetDefaultRateChartManager()) { defaultRateCharts = defaultRateChartManager.GetAll().Where(rc => rc.Currency.Id == Id && (!rc.NumberPrefix.StartsWith("#") || rc.NumberPrefix.StartsWith("Default")) && rc.AccountCredit == "Credit").ToList(); } return this.Json( new { Result = (from obj in defaultRateCharts select new { Id = obj.Id, DialPrefix = obj.NumberPrefix, Rate = obj.PurchaseRates }) } , JsonRequestBehavior.AllowGet ); } ``` and I dont get that error now but how can I parse the collection in ajax success. I changed success to following but it is not adding rows in table. ``` success: function (data) { var row = $('<tr>'); for(var i = 0; i < data.length; i++) { row.append($('<td>').html(data[i])); } $('#results').append(row); jQuery('#RecordingRates').dialog({ closeOnEscape: false }); $(".ui-dialog-titlebar").hide(); $("#RecordingRates").dialog({ dialogClass: 'transparent' }); $('#RecordingRates').dialog('open'); } }); ``` In Firebug Net => XHR=> Json, It shows following JSON: ``` [Object { Id= 1 , DialPrefix= "1" , Rate= 2.6 }, Object { Id= 3 , DialPrefix= "2" , Rate= 2.6 }, Object { Id= 5 , DialPrefix= "7" , Rate= 3.5 }, 3 more...] 0 Object { Id= 1 , DialPrefix= "1" , Rate= 2.6 } 1 Object { Id= 3 , DialPrefix= "2" , Rate= 2.6 } 2 Object { Id= 5 , DialPrefix= "7" , Rate= 3.5 } 3 Object { Id= 7 , DialPrefix= "8" , Rate= 6 } 4 Object { Id= 9 , DialPrefix= "Default" , Rate= 5 } 5 Object { Id= 15 , DialPrefix= "Subscription" , Rate= 15 } ```