【问题标题】:Exception from Newtonsoft.Json.Serialization来自 Newtonsoft.Json.Serialization 的异常
【发布时间】:2015-01-28 03:57:30
【问题描述】:

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

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

在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CheckForCircularReference(JsonWriter writer, Object value, JsonProperty property, JsonContract contract, JsonContainerContract containerContract, JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter 编写器,对象值,JsonContainerContract 合同,JsonProperty 成员,JsonProperty 属性,JsonContract& memberContract,Object& memberValue) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter 编写器,对象值,JsonObjectContract 合同,JsonProperty 成员,JsonContainerContract 集合合同,JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer,对象值,JsonContract valueContract,JsonProperty 成员,JsonContainerContract containerContract,JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter 编写器,对象值,JsonObjectContract 合同,JsonProperty 成员,JsonContainerContract 集合合同,JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer,对象值,JsonContract valueContract,JsonProperty 成员,JsonContainerContract containerContract,JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter 编写器,对象值,JsonObjectContract 合同,JsonProperty 成员,JsonContainerContract 集合合同,JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer,对象值,JsonContract valueContract,JsonProperty 成员,JsonContainerContract containerContract,JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter 编写器,对象值,JsonObjectContract 合同,JsonProperty 成员,JsonContainerContract 集合合同,JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer,对象值,JsonContract valueContract,JsonProperty 成员,JsonContainerContract containerContract,JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter 编写器,对象值,JsonObjectContract 合同,JsonProperty 成员,JsonContainerContract 集合合同,JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer,对象值,JsonContract valueContract,JsonProperty 成员,JsonContainerContract containerContract,JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter 编写器,对象值,JsonObjectContract 合同,JsonProperty 成员,JsonContainerContract 集合合同,JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer,对象值,JsonContract valueContract,JsonProperty 成员,JsonContainerContract containerContract,JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter 编写器,对象值,JsonObjectContract 合同,JsonProperty 成员,JsonContainerContract 集合合同,JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer,对象值,JsonContract valueContract,JsonProperty 成员,JsonContainerContract containerContract,JsonProperty containerProperty) 在 Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType) 在 Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter,对象值,类型 objectType) 在 Newtonsoft.Json.JsonConvert.SerializeObject(对象值、类型类型、格式化格式、JsonSerializerSettings 设置) 在 Hangfire.Common.Job.GetArguments(MethodCallExpression callExpression) 在 Hangfire.Common.Job.FromExpression(Expression1 methodCall) at Hangfire.BackgroundJobClientExtensions.Create(IBackgroundJobClient client, Expression1 methodCall, IState 状态) 在 Hangfire.BackgroundJobClientExtensions.Enqueue(IBackgroundJobClient 客户端,Expression1 methodCall) at Hangfire.BackgroundJob.Enqueue(Expression1 methodCall)

【问题讨论】:

  • 你应该使用 JsonSerializerSettings。

标签: asp.net hangfire


【解决方案1】:

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

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

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

return Ok(await Get(Id));

...Get(Id) 是控制器上的另一个操作。

我把return语句改成:

return await Get(Id);

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

【讨论】:

    【解决方案2】:

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

    How to serialize as Json an object structure with circular references? 可能会有所帮助。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2017-09-12
          • 1970-01-01
          • 1970-01-01
          • 2014-04-29
          • 1970-01-01
          • 1970-01-01
          • 2010-12-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多