而序列化类型'的对象中检测到循环引用的System.Reflection检测到、象中、类型、序列化

2023-09-10 19:08:31 作者:笑脸给多了惯的都是毛病

我有这样一个asp.net MVC 3控制器的操作方法:

 公共JsonResult GetRecordingRates(INT标识)
{
    名单< D​​efaultRateChart> defaultRateCharts =新的名单,其中,DefaultRateChart>();
    使用(IDefaultRateChartManager defaultRateChartManager =新ManagerFactory()。GetDefaultRateChartManager()){
       defaultRateCharts = defaultRateChartManager.GetAll()式(RC => rc.Currency.Id == ID和安培;&安培;!(rc.Number prefix.StartsWith(#)|| rc.Number prefix.StartsWith(默认))及和放大器; rc.AccountCredit ==信贷)了ToList()。
    }
    返回JSON(defaultRateCharts);
}
 

我想送这个名单jQuery的阿贾克斯成功的方法,但我得到的 500内部服务器错误

我的AJAX调用是这样的:

  $。阿贾克斯({
键入:POST,
数据类型:JSON,
网址:/首页/ GetRecordingRates
数据: {
    编号:$(#hdCurrencyId)VAL()。
},
成功:功能(数据){
        警报(数据);
   }
});
 

在在响应选项卡萤火虫XHR,它说:

C 序列化与反序列化

一个循环引用,而序列化类型System.Reflection.RuntimeModule。

的对象检测

我改变了操作方法如下:

 公共JsonResult GetRecordingRates(INT标识)
{
    名单< D​​efaultRateChart> defaultRateCharts =新的名单,其中,DefaultRateChart>();
    使用(IDefaultRateChartManager defaultRateChartManager =新ManagerFactory()。GetDefaultRateChartManager())
    {
        defaultRateCharts = defaultRateChartManager.GetAll()式(RC => rc.Currency.Id == ID和安培;&安培;!(rc.Number prefix.StartsWith(#)|| rc.Number prefix.StartsWith(默认))及和放大器; rc.AccountCredit ==信贷)了ToList()。
    }

    返回this.Json(
        新
        {
            结果=(从OBJ在defaultRateCharts选择新{n = obj.Id,拨号preFIX = obj.Number preFIX,速率= obj.PurchaseRates})
        }
        ,JsonRequestBehavior.AllowGet
     );
}
 

和我没有现在得到这个错误,但我怎么能解析阿贾克斯成功采集。我改成功之后,但它不添加表行。

 成功:功能(数据){
            VAR行= $('< TR>');
            对于(VAR I = 0; I< data.length;我++){
                row.append($('< TD>。)HTML(数据[I]));
            }

            $('#结果)追加(行);
            。jQuery的('#RecordingRates)对话框({closeOnEscape:虚假});
            $(UI-对话框的标题栏)隐藏()。
            $(#RecordingRates)对话框({dialogClass:'透明'});
            $('#RecordingRates)对话框(开放);
           }
    });
 

在萤火虫网=> XHR =>的Json,它显示了在JSON:

  [对象{n =

1

,拨号preFIX =

1的

,率=

2.6

},{对象n =

3

,拨号preFIX =

2

,率=

2.6

},{对象n =

五

,拨号preFIX =

7

,率=

3.5

},3更多...]


0
    对象{n =

1

,拨号preFIX =

1的

,率=

2.6

}

1
    对象{n =

3

,拨号preFIX =

2

,率=

2.6

}

2
    对象{n =

五

,拨号preFIX =

7

,率=

3.5

}

3
    对象{n =

7

,拨号preFIX =

8

,率=

6

}

4
    对象{n =

9

,拨号preFIX =

默认

,率=

五

}

五
    对象{n =

15

,拨号preFIX =

订阅

,率=

15

}
 

解决方案   

我怎么能解析阿贾克斯成功采集。我改成功   以下,但它未在表中增加的行。

您正在返回具有以下字段的集合:编号拨号preFIX ,并没有使用它们。

  VAR行= $('< TR>');
对于(VAR I = 0; I< data.length;我++){
    row.append($('< TD>。)HTML(数据[I]));
}

$('#结果)追加(行);
 

您需要将它们添加到您的循环:

  row.append($('< TD>。)HTML(数据[I] .Dial preFIX));
row.append($('< TD>。)HTML(数据[I] .Rate));
 

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

}

解决方案

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));