is there a way to set Controller.Json ReferenceLoopHandling property?
It is currently causing a self referencing loop when parsing entities with navigation properties defined on both ends. This problem is solved by setting
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
Is there a way to do this for Controller.Json method?
I found this piece of code, but it does not seem to work.
services.Configure<MvcOptions>(option =>
{
option.OutputFormatters.Clear();
var jsonOutputFormatter = new JsonOutputFormatter();
jsonOutputFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
option.OutputFormatters.Insert(0, jsonOutputFormatter);
});
I think that a prettier solution for this is to add JsonOptions in your ConfigureServices like:
services.AddMvc().AddJsonOptions(options =>
{
options.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});
The question is from some time ago but it still can help other people.
Try this in your ConfigureServices method of the Startup class:
services.AddMvc(options =>
{
((JsonOutputFormatter)options.OutputFormatters.Single(f => f.GetType() == typeof(JsonOutputFormatter))).SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});
or
services.AddMvc(options =>
{
var jsonOutputFormatter = options.OutputFormatters.SingleOrDefault(f => f.GetType() == typeof(JsonOutputFormatter)) as JsonOutputFormatter;
if (jsonOutputFormatter != null)
jsonOutputFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});
This worked for me with .NET Core 3.0.
services.AddMvcCore().AddNewtonsoftJson(
options => options.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With