我有一行
string serializedContext = JsonConvert.SerializeObject(HttpContext.Current)
但我在这条线上遇到了例外。
为类型为“System.Web.HttpContext”的属性“Context”检测到自引用循环。 Path'ApplicationInstance'。
我正在尝试将已分类的上下文传递给Web服务。 为什么检测到自引用循环以及可能出路的原因是什么?
答案 0 :(得分:1)
误解:
序列化您的上下文并在另一侧反序列化它没有任何语义:如果您将其发送到远程Web服务,它将具有自己的http上下文。
解决问题 相反,您可能想要做的是:使用您需要在远程Web服务上使用的数据创建一个新对象。
不要将其视为上下文,将其视为数据传输对象,其中包含完成另一方工作所需的所有事项。
其他注意事项
您可能认为基本上创建一个包含与HttpContext相同的数据的新对象是很痛苦的,但是您可以通过使用AutoMapper来减轻将值从一个对象复制到另一个对象的繁琐程序,以便将值从一个对象复制到另一个对象而无需自己编写代码(基于约定)。
希望这有帮助。
答案 1 :(得分:-2)
您可以尝试:
string serializedContext = JsonConvert.SerializeObject(HttpContext.Current, Formatting.Indented,
new JsonSerializerSettings {
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});