1. ホーム
  2. c#

[解決済み] JSON.Netの自己参照ループが検出されました。

2022-05-06 15:19:18

質問

私は4つのテーブル内の私のウェブサイト用のMSSLデータベースを持っています。

これを使うと

public static string GetAllEventsForJSON()
{
    using (CyberDBDataContext db = new CyberDBDataContext())
    {
        return JsonConvert.SerializeObject((from a in db.Events where a.Active select a).ToList(), new JavaScriptDateTimeConverter());
    }
}

このコードでは、以下のようなエラーが発生します。

Newtonsoft.Json.JsonSerializationException: プロパティ 'CyberUser' でタイプ 'DAL.CyberUser' を持つ自己参照ループが検出されました。 パス '[0].EventRegistrations[0].CyberUser.UserLogs[0]'.

どのように解決するのですか?

私はちょうど親/子コレクションで同じ問題を抱えていた、私のケースを解決するためにその記事を見つけた。 私は、親コレクションのアイテムのリストだけを表示したかったので、子データは必要ありませんでしたので、以下の方法を使用しました。

JsonConvert.SerializeObject(ResultGroups, Formatting.None,
                        new JsonSerializerSettings()
                        { 
                            ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                        });

JSON.NETエラー タイプの自己参照ループが検出されました。

にあるJson.NET codeplexのページも参照しています。

http://json.codeplex.com/discussions/272371

ドキュメンテーション ReferenceLoopHandlingの設定