簡體   English   中英

JSON.stringify引發錯誤“序列化類型為'System.Reflection.RuntimeModule'的對象時檢測到循環引用”。 ”

[英]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"}}

原始json圖片

我認為問題在於與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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM