2

我正在将 Hangfire 集成到我的项目中。我在 BackgroundJob.Enqueue 中得到了 Newtonsoft.Json.Serialization 的异常,如下所示。谁能告诉我如何解决这个问题?

检测到类型为“ASP.global_asax”的属性“ApplicationInstance”的自引用循环。路径'NamingContainer.Page.ModelBindingExecutionContext.HttpContext.ApplicationInstance.Context'。

在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CheckForCircularReference(JsonWriter 编写器,对象值,JsonProperty 属性,JsonContract 合同,JsonContainerContract containerContract,JsonProperty containerProperty)在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter 编写器,对象值,JsonContainerContract 合同,JsonProperty Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty) at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty) at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject (JsonWriter 编写器,对象值,JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty) at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty) at Newtonsoft.Json.Serialization.JsonSerializerInternal.Writer SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty) at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty) at牛顿软件。Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer,Object value,JsonContract valueContract,JsonProperty member,JsonContainerContract containerContract,JsonProperty containerProperty)在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer,Object value,JsonObjectContract contract,JsonProperty member,JsonContainerContract collectionContract, JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value , JsonObjectContract 合约, JsonProperty 成员,JsonContainerContract collectionContract, JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization. JsonSerializerInternalWriter。SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty) at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty) at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType) 在 Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType) 在 Newtonsoft.Json.JsonConvert.SerializeObject(Object value, Type类型,格式化格式化,JsonSerializerSettings 设置)在 Hangfire.Common.Job。Hangfire.Common.Job.FromExpression(Expression) 处的 GetArguments(MethodCallExpression callExpression)1 methodCall) at Hangfire.BackgroundJobClientExtensions.Create(IBackgroundJobClient client, Expression1 methodCall,IState 状态)在 Hangfire.BackgroundJobClientExtensions.Enqueue(IBackgroundJobClient 客户端,表达式1 methodCall) at Hangfire.BackgroundJob.Enqueue(Expression1 methodCall)

4

4 回答 4

2

我收到了这个错误(与 Hangfire 无关),因为我有一个控制器方法:

public async Task<IHttpActionResult> MyAction(...)

我正在返回一个ActionResult包裹在另一个中ActionResult,如下所示:

return Ok(await Get(Id));

...Get(Id)控制器上的另一个动作在哪里。

我将返回语句更改为:

return await Get(Id);

它解决了这个问题。ApplicationInstance错误中提到的属性是我需要的提示:控制器没有从Get方法中序列化我的 POCO 实体;它正在序列化包含该 POCO 的 IHttpActionResult!

于 2018-02-19T19:14:41.677 回答
0

您正在使用一个名为“ApplicationInstance”的属性序列化一个对象,该属性包含对自身的引用。将此属性标记为不可序列化。

如何将具有循环引用的对象结构序列化为 Json?可能会有所帮助。

于 2015-01-28T04:30:55.523 回答
0

我发现问题来自未序列化的参数。现在我解决了我的问题。一切运行良好。感谢大家。

于 2015-01-28T15:26:41.493 回答
0

从 Fiddler 调用 Post 时,正文中有 json 时出现此错误。我终于意识到了解决方案。我没有在标题中设置内容类型。一旦我设置了 Content-Type: application/json;charset=UTF-8,问题就消失了。

于 2020-12-06T01:14:32.963 回答