7

一連の linq to sql クラスがあり、.NET JavaScriptSerializer を使用してそれらを JSON にシリアル化しました。

ただし、関連するテーブルにレコードを追加するとすぐに、シリアル化によって「循環参照例外」がスローされます。ああっ!

ここに詳しく説明されています。

いくつかのオプションがあります

  • linq to sql クラスを関係のないクラスに変換して、循環参照を回避します。
  • アソシエーションを無効にして循環参照を切り取る - 私はこれを現実的な選択肢とは考えていません
  • ScriptIgnoreAttribute を (何らかの方法で) 使用します。プロパティは生成されたクラスにあり、LINQ to SQL はバディ クラスを自動的に尊重しないため、これを簡単に適用することはできませんでした。
  • JSON.NET を使用し、何らかの方法で属性 + バディ クラスを使用して、シリアライザーが関係を横断しようとするのを止めます。

他の誰かがこれに遭遇しましたか?可能であれば最後のオプションを希望しますが、これを行う方法がわかりません。

どんな助けでも大歓迎です

4

3 に答える 3

8

Json.NETの最新バージョンは、循環関係のシリアル化をサポートしています。ヘルプのオブジェクト参照の保持を確認してください。

于 2009-09-25T10:28:01.573 に答える
4

受け入れられた回答への追加リンク

Json.NET ヘルプ、オブジェクト参照の保持 (例付き)

LINQ to SQL で問題なく動作するようです

于 2009-10-23T20:59:40.183 に答える
1

ジェームズの解決策は、私の問題の一部を解決しました。オブジェクト内の特定のリスト タイプを除外する必要がありました。私の問題を解決するために、必要なオブジェクトの部分をコピーしました。以下は一例です。

var DB = new DBDataContext();
            var lUsers = new List<User>();
            DB.Users.ToList().ForEach(x => lUsers.Add(new User()
                {
                    ID = x.ID,
                    FIRST_NAME = x.FIRST_NAME
                }) );
于 2013-08-07T23:23:28.280 に答える