【发布时间】:2023-03-29 16:15:01
【问题描述】:
我目前正在进行概念验证,遇到了一个涉及使用 JSON 序列化 HttpRequest 的问题。
背景
我最初认为我可以使用JSON.Encode() 方法轻松完成它,如下所示:
JSON.Encode(HttpContext.Request)
但是,我很快发现这会导致抛出各种循环引用(主要是由于 Request 对象的实际结构和复杂性)。这些仅在实际遇到包含循环引用的属性时才会发生,因为我之前使用以下代码来获取我需要的特定元素:
JSON.Encode(new {HttpContext.Request.Cookies,HttpContext.Request.Headers, ... });
效果很好。
我只是好奇是否有更好的处理方法(或者最好的处理方法是什么)。我将在下面详细介绍到目前为止我所采取的一些方法,以找出我可能出错的任何地方。
以前的方法
使用反射遍历 请求并尝试构造一个 JSON 字符串 “逐个属性”。 (遇到循环时失败 参考)
尝试将每个属性存储在 Dictionary 对象中,然后使用 JSON 序列化整个 Dictionary(希望它将“扁平化”对象并使其更容易序列化)
使用 JSON.NET library 并尝试通过 JsonConvert.SerializeObject() 方法对其进行序列化(我已尝试传递几个额外的设置以避免循环引用,但没有任何运气)
我认为我的最新方法(使用 JSON.NET 库)可以接近工作,但是我遇到了一个错误,涉及请求中 Stream 对象的“超时”属性。 p>
我并不反对简单地避免序列化 Stream 对象和循环引用。我只是想尽可能多地获取 Request 对象,同时避免任何这些类型的事故。
【问题讨论】:
标签: c# asp.net-mvc json serialization