3

頭を包むことができないという奇妙な問題があります。関連するJSONがActionResultへのajax呼び出しを介して渡されるMVC4アプリケーション用の「csvへのエクスポート」機能を作成しようとしています。ActionResult は、文字列化された JSON を (JSON.Net で) 逆シリアル化し、それを csv 形式でファイルに書き込み、サーバー パスを新しいファイルに返します。次に、成功のコールバックがパスを受け取り、URL を呼び出してダウンロードします。

これはローカルでは問題なく動作しますが、ライブ テスト サーバーでは次の例外が発生します。

A circular reference was detected while serializing an object of type 'System.Reflection.RuntimeModule'.

JSON (およびその後の逆シリアル化先のオブジェクト) は少し複雑です。これらは、SlickGrid DataView のグループ化されたサブセットから取得されます。列の合計の集計情報を含めたときに循環参照の例外が発生していました (これは SlickGrid に精通している人にのみ関連します。サーバーに渡されるデータが問題になるとは思いません) が、それらを削除しましたJSON をサーバーに渡す前に。JSON から C# へのクラス構造は次のとおりです。

[Serializable]
public class Row
{
    public int id { get; set; }
    public DateTime DateCreated { get; set; }
    public int RefNo { get; set; }
    public string ClientName { get; set; }
    public string Plate { get; set; }
    public string Address1 { get; set; }
    public int? ProductID { get; set; }
    public string Product { get; set; }
    public string S1 { get; set; }
    public string S2 { get; set; }
}

[Serializable]
public class RootReportObject
{
    public bool __group { get; set; }
    public int level { get; set; }
    public int count { get; set; }
    public string value { get; set; }
    public string title { get; set; }
    public int collapsed { get; set; }
    public List<Row> rows { get; set; }
    public object groups { get; set; }
    public string groupingKey { get; set; }
}

私が考えている唯一のことは、データが構造化されているため、グループが必ずしも一意の行参照を持っているとは限らないため、ルートオブジェクトの行の List<> が逆シリアル化中に循環参照をスローしている可能性があるということです。

私の質問は、なぜローカルでうまく動作するのですか?? 何が欠けているのかわかりません。

4

1 に答える 1

2

[ScriptIgnore]属性が役立つのは素晴らしいことです。また、AJAX コードを含め、すべての URL パスがアプリケーション ルートに正しく解決されることを完全に確認する必要があります。これらのいくつかが間違っていると、開発から本番への移行中の問題の悪名高い原因になります。

それが必ずしも主要な問題ではないように思えますが、アプリの設計についてはまったく理解していません。それは間違いなく一見の価値があります。

于 2014-01-20T22:23:17.520 に答える