2

Json.Encode が 64 ビット iis7 Windows 7 ボックスであるローカル (localhost) で動作している状況があります。

Windows 2003 32 ビット IIS6 に展開すると、循環参照エラーが発生します。「ここでエラー」の下に表示されているのは、エラーが始まる行です。

@*var model = '@Html.Raw(Json.Encode(Model))';*@ <<<<Error here
var model = '@Html.GetJson(Model)';

これを解決しようとする一環として、サーバーで使用されていたプロジェクト dll の 1 つがローカルのものと異なる可能性があると考えたため、参照 dll をサーバーの bin ディレクトリにコピーしました。これは役に立ちませんでした。

かなり簡単な修正があります。私は問題を特定できることを望んでいました。私の推測では、ローカルとは異なる方法でサーバー上でいくつかのdllを使用して、サーバー上でJson.Encode経由でjsonを返していると思います。

上記の2行目に示されている私の解決策は、Json.Netとmvcヘルパーを使用することです

public static MvcHtmlString GetJson(this HtmlHelper htmlHelper, ViewModel vm)
{
    string s = JsonConvert.SerializeObject(vm);
    return new MvcHtmlString(s);
}

誰かがこれを見て解決しましたか?(json.net なし)

4

1 に答える 1

1

Entity Framework を使用していると仮定すると、フレームワークによって開発されたエンティティを調べると、このトピックに光が当てられます。たとえば、Sessions という名前のテーブルと Enrollments という名前のテーブルがあり、Enrollments テーブルは Sessions テーブル PK に対して FK 関係を持っています。これにより、Session オブジェクトは Enrollments のコレクションを持ち、Enrollment オブジェクトは登録の対象である Session の仮想インスタンスを持ちます...これは Enrollments のコレクションなどを指します...画像を取得し、AND json シリアライゼーションによって循環参照の問題が検出された理由。

解決策は、コード内の Session オブジェクトのコレクションをクエリするのではなく、代わりにすべて同じフィールドを持つ匿名 (型指定されていない) オブジェクトをクエリすることでした。これにより、Json.Encode() が混乱するのを防ぎます。これは、Entity Framework がコード ビハインド/サーバー側コードで使用できる循環参照を認識していないためです。

于 2018-05-17T15:39:47.873 に答える