2017-11-30 15 views
1

別のASP.NET Core 2/Angular 2アプリケーションで使用されるASP.NET Core 2 API C#プロジェクトがあります。 APIプロジェクトMVCサービスJSONオプションを設定しましたReferenceLoopHandlingIgnoreMVC AddJsonOptions ReferenceLoopHandling設定が適用されていません

services.AddMvc().AddJsonOptions(options => 
    { 
     options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; 
    }); 

しかし、私は自分のアプリケーションを実行すると、私はまだ、「自己参照ループが検出され得る...」というエラーが私のHTTP GETメソッドのいずれかから。

をデバッグモードでは、私はこの方法で一時停止した場合結果はシリアル化され、手動で直列化などに

?Newtonsoft.Json.JsonConvert.SerializeObject(
    myDataObject, 
    new Newtonsoft.Json.JsonSerializerSettings 
    { 
     ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore 
    }) 

データを実行する前に、予想通りエラーなしでシリアル化される。

なぜサービス構成ではないだろうこのメソッドに適用されますか?

+1

*は*動作するはずです。スタートアップの設定と問題を引き起こしているアクションから、より多くのコードを共有する必要があるかもしれません。 – CalC

答えて

3

ASP.NET Core MVCにはJsonSerializerSettingsというオブジェクトがあります。これはhereで見ることができます。これはAddJsonOptionsを呼び出すときに設定します。このインスタンスに適用する設定は、JsonConvertを呼び出す可能性のあるメソッドには適用されません。これらのメソッドに影響を与えるには、DefaultSettingsプロパティを設定する必要があります。例えば:あなたのStartupクラスまたは多分あなたのProgramクラスでこのどこかを行うことができます

JsonConvert.DefaultSettings =() => new JsonSerializerSettings 
{ 
    ReferenceLoopHandling = ReferenceLoopHandling.Ignore; 
}; 

+0

私のデバッグステートメントは同等ではないので、わかります。しかし、クライアントがAPIにアクセスしたとき、つまりある時点でオブジェクトモデルのシリアル化が失敗したときに、MVCサービスの設定が適用されないという問題があります。 MVCサービスのAddJsonOptions設定がAPIメソッドに適用されると思いました。 – Craig

+0

このコードスニペットで問題が解決されていない場合は、質問に詳しい情報を追加する価値があります。問題のある行動は始めるのに適しています。 –

+0

私はPostman経由でAPIにアクセスしました。データは、デシリアライズである必要があるように、適用されたオプションで期待どおりにAPIによってシリアル化されています。私はより多くの情報があるとき私はポストバックします。 – Craig

関連する問題