0

Linq2Sql オブジェクトを JSON 経由で jQuery プラグインに送信する最も効率的な方法を見つけようとしています。できれば各クラスにコードを追加する必要はありません。

EntitySet は、再帰を引き起こすだけでなく、( JSON.NETの ReferenceLoopHandling 機能を使用して) 再帰を無視すると、本当に 1 つまたは 2 つのレベルだけが必要なときに、ばかげた量のデータを取得できるため、主な問題です。ユーザー、ロール、およびアクセス許可について話していると、JSON でユーザーのロール、ユーザーのアクセス許可、ロールのアクセス許可、およびロールのユーザーをすべて取得してから、再帰にヒットして停止するため、これは非常に悪くなります。これを、私が実際に必要としているものと比較してください。これは単なる RoleId です。

私の最初のアプローチは、オブジェクトの「簡略化された」バージョンを送信することでした。エンティティを反映し、EntitySets を null に設定しますが、もちろん上記の例では Roles が null に設定されるため、RoleId は null になります。第 2 レベルのプロパティのみを null に設定すると動作しますが、JsonSerializer がリフレクションを実行するときに、強制終了されなかった EntitySets (第 1 レベルのもの) が関連するテーブルを再作成するため、まだデータが多すぎます。私は必要ありません。

すべてのクラスの軽量バージョンを作成し、それらに「From」および「To」スタイルのメソッドを実装する状況には絶対に入りたくありません。これは多くの作業であり、無駄に思えるからです。

もう 1 つのオプションは、関連するプロパティに JsonIgnoreAttribute を配置することですが、これは、クラスを再生成する必要があるたびに悪夢のようなシナリオを引き起こします。

私が好きで嫌いな現在のお気に入りの解決策は、クラスをオプトインのシリアル化モードにすることですが、実際のプロパティに属性を追加できないため、JSON のみのプロパティを部分的に作成する必要があります。クラス。繰り返しますが、これは無駄に思えますが、今のところ最高だと思います。

どんな提案もありがたく受け取った!

4

1 に答える 1

0

dbml ファイルでシリアル化モードを設定しようとしましたか?

これはコード生成の標準プロパティであり、Unidirectional に設定すると、テーブル構造の追加レベルがすべて生成されるわけではありません。データ コントラクトでは追加レベルの送信が許可されていないため、これを Silverlight と WCF で使用してデータを送信しました (silverlight では、できることとできないことが非常に限られています)。

お役に立てれば!

于 2009-01-08T21:30:27.027 に答える