![](/img/trans.png)
[英]A circular reference was detected while serializing an object of type 'System.Reflection.RuntimeModule' MVC JSON
[英]JSON.stringify throws error “A circular reference was detected while serializing an object of type 'System.Reflection.RuntimeModule'. ”
在客戶端,對象“ selectedMeter”是用JavaScript構建的。 該對象通過ajax調用發送到服務器,並傳遞到mvc控制器。
$.ajax({
url: 'SaveManualMeter',
type: "POST",
cache: false,
contentType: "application/json; charset=utf-8",
data: **JSON.stringify({ clientId: selectedClientId, manualMeter: selectedMeter** }),
complete: function () {
在本地測試時,它可以工作,但是在發布站點時,它會引發錯誤 。序列化類型為'System.Reflection.RuntimeModule'的對象時,檢測到循環引用。
- [InvalidOperationException:序列化類型為'System.Reflection.RuntimeModule'的對象時,檢測到循環引用。]
- System.Web.Script.Serialization.JavaScriptSerializer.SerializeValueInternal(對象o,StringBuilder sb,Int32深度,哈希表objectsInUse,SerializationFormat serializationFormat,MemberInfo currentMember)+1856
- System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(對象o,StringBuilder sb,Int32深度,Hashtable objectsInUse,SerializationFormat serializationFormat,MemberInfo currentMember)+266
- System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(Object o,StringBuilder sb,Int32深度,Hashtable objectsInUse,SerializationFormat serializationFormat)+668
控制器看起來像這樣
public ActionResult
SaveManualMeter(string clientId, ManualMeter manualMeter)
有人知道問題出在哪里嗎?
手動計的結構如下
[JsonObject(IsReference = false)]
public class ManualMeter
{
public int Id { get; set; }
public string Ean { get; set; }
public PeriodType Period { get; set; }
public string TagTable { get; set; }
public string TagTableId { get; set; }
public int Overflow { get; set; }
public string TZ { get; set; }
public DataLogger DataLogger { get; set; }
public Tag Tag { get; set; }
public List<ManualMeterAction> ManualMeterActions { get; set; }
}
public class ManualMeterAction
{
public int Id { get; set; }
public ManualMeterActionType Type { get; set; }
//navigation properties
public int ManualMeterId { get; set; }
public int UserId { get; set; }
}
發布的原始json對象似乎還可以
{"clientId":"11","manualMeter":{"Tag":{"Name":"22","Unit":"Unknown","TagType":"0","Content":"1"},"Id":0,"Ean":"","ManualMeterActions":[],"Period":"0","Overflow":"22","TZ":"Europe/Brussels"}}
我認為問題在於與DataLogger和Tag的表關系。 要解決此問題,請創建一個視圖模型,該模型將刪除任何關系,如下所示:
public class ManualMeterViewModel {
public string Ean { get; set; }
public string TagTable { get; set; }
public string TagTableId { get; set; }
public int Overflow { get; set; }
public string TZ { get; set; }
public List<ManualMeterAction> ManualMeterActions { get; set; }
}
像這樣在您的控制器中使用:
public ActionResult
SaveManualMeter(string clientId, ManualMeterViewModel manualMeter){
var realmanualMeter = new ManualMeter(){
Ean = manualMeter.Ean,
TagTable = manualMeter.TagTable
…
};
}
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.