2

我正在运行一个 MVC 项目并使用 Json,我的代码在 Visual Studio 中运行时可以正常运行,然后我在 IIS 上有一个站点指向同一个文件夹,当从 IIS 站点执行 URL 时,我的代码没有执行与在 Visual Studio 中相同的操作。

在我的代码中,我有:

return JsonConvert.SerializeObject(objectToSerialize);

当我发送 RouteData.Values 时,会产生以下错误:

Error getting value from 'CompiledAssembly' on 'System.CodeDom.Compiler.CompilerResults'.

at Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CalculatePropertyValues(JsonWriter writer, Object value, JsonContainerContract contract, JsonProperty member, JsonProperty property, JsonContract& memberContract, Object& memberValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject(JsonWriter writer, Object value, JsonObjectContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeISerializable(JsonWriter writer, ISerializable value, JsonISerializableContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)
at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)
at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)
at Newtonsoft.Json.JsonConvert.SerializeObjectInternal(Object value, Type type, JsonSerializer jsonSerializer)
at Newtonsoft.Json.JsonConvert.SerializeObject(Object value)
at x.Data.Helpers.Data.JsonHelper.SerializeObject(Object objectToSerialize) in D:\Development\x\x.Data\Helpers\Data\JsonHelper.cs:line 18

我目前正在使用Newtonsoft.Json, Version=11.0.0.0

任何想法发生了什么?IIS 没有 Visual Studio 的功能吗?

4

1 回答 1

3

我最近遇到了同样的异常,但原因不同。您的 RouteData.Values 对象是一个可以将对象作为值的RouteValueDictionary,其中一些对象可能具有在调用它们的“get”时引发异常的属性。

您可以通过传入 JsonSerializerSettings 对象作为第二个参数并覆盖错误事件处理程序来处理这些问题。

如果您只想忽略此类属性,将 ErrorEventArgs.ErrorContext.Handled 设置为 true 应该可以解决问题。

return JsonConvert.SerializeObject(objectToSerialize, new JsonSerializerSettings() { Error = new EventHandler<Newtonsoft.Json.Serialization.ErrorEventArgs>((obj, args) => {
                args.ErrorContext.Handled = true;
            }) });
于 2018-12-11T20:32:00.573 回答