2016-05-20 6 views
0

クライアント側でオブジェクトselectedMeterはJavaScriptでビルドされています。このオブジェクトは、ajax呼び出しでサーバーに送信され、mvcコントローラーに渡されます。サイトが公開されている場合JSON.stringifyで「「System.Reflection.RuntimeModule」タイプのオブジェクトをシリアル化する際に循環参照が検出されました。」

$.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深度、ハッシュテーブルオブジェクト、SerializationFormat、serializationFormat、MemberInfo currentMember)+1856
  • System.Web.Script.Serialization.JavaScriptSerializer.SerializeValue(Object o、StringBuilder sb、Int32 depth、Hashtable objectsInUse、SerializationFormat serializationFormat、MemberInfo currentMember)+ 266
  • System.Web.Script.Serialization.JavaScriptSerializer.SerializeCustomObject(オブジェクトO、StringBuilderのSB、のInt32の深さ、ハッシュテーブルobjectsInUse、SerializationFormat serializationFormat)668

この

public ActionResult 
    SaveManualMeter(string clientId, ManualMeter manualMeter) 
コントローラルック

誰かが問題の原因を知っていますか?

投稿された生のJSONオブジェクトは、私は、問題があるテーブルの関係であると思われるもの

{"clientId":"11","manualMeter":{"Tag":{"Name":"22","Unit":"Unknown","TagType":"0","Content":"1"},"Id":0,"Ean":"","ManualMeterActions":[],"Period":"0","Overflow":"22","TZ":"Europe/Brussels"}} 

raw json image

+0

ManualMeterの構造はどのようなものですか? –

+0

こんにちはマーク、私は質問に構造を追加しました –

答えて

0

OKらしい

[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; } 
    } 

ようmanualmeterの 構造が見えますDataLoggerおよびタグ。これを回避するので、どのような関係が削除されますのviewmodelを作成するには:

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 
     … 
    }; 
} 

は、この情報がお役に立てば幸いです。

+0

あなたの返信をありがとう。 IISに展開されたときにローカルではなく、なぜローカルで動作するのかを知っていますか?問題は、マニュアルメタモデルに基づいて多くのjavascriptを使用しており、提案されたソリューションには多くの変更が必要だということです。 –

+0

わかりません。しかし、エラーはIISとは何の関係もないことは確かです。 –

+0

このエラーも発生しています。そして、私は、JSONオブジェクトにある同じフィールド名で行うことができると思います。 –

関連する問題