HttpContext.Current无法序列化

时间:2016-11-24 06:31:00

标签: c# asp.net json.net

我有一行

string serializedContext = JsonConvert.SerializeObject(HttpContext.Current)

但我在这条线上遇到了例外。

  

为类型为“System.Web.HttpContext”的属性“Context”检测到自引用循环。 Path'ApplicationInstance'。

我正在尝试将已分类的上下文传递给Web服务。 为什么检测到自引用循环以及可能出路的原因是什么?

2 个答案:

答案 0 :(得分:1)

误解:

序列化您的上下文并在另一侧反序列化它没有任何语义:如果您将其发送到远程Web服务,它将具有自己的http上下文。

解决问题 相反,您可能想要做的是:使用您需要在远程Web服务上使用的数据创建一个新对象。

不要将其视为上下文,将其视为数据传输对象,其中包含完成另一方工作所需的所有事项。

其他注意事项

您可能认为基本上创建一个包含与HttpContext相同的数据的新对象是很痛苦的,但是您可以通过使用AutoMapper来减轻将值从一个对象复制到另一个对象的繁琐程序,以便将值从一个对象复制到另一个对象而无需自己编写代码(基于约定)。

希望这有帮助。

答案 1 :(得分:-2)

您可以尝试:

string serializedContext = JsonConvert.SerializeObject(HttpContext.Current, Formatting.Indented, 
new JsonSerializerSettings { 
        ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});