有人有序列化HttpRequestMessage对象的经验吗?尝试使用Json.net,它部分工作。也就是说,JsonConvert.DeserializeObject由于结构问题而失败。StringContent:找不到用于类型System.Net.Http.StringContent的构造函数。
简而言之,这里的用例是,我希望保存Web请求,并在以后出现临时网络问题或服务不可用等情况时发出它。
失败的示例代码:
var request = new HttpRequestMessage(HttpMethod.POST, "http://www.something.com");
request.Headers.Date = DateTimeOffset.UtcNow;
request.Headers.AcceptLanguage.Add(new System.Net.Http.Headers.StringWithQualityHeaderValue("en-US"));
request.Content = new StringContent("Hello World!");
request.Content.Headers.Add("x-some", "thing");
var result = JsonConvert.SerializeObject(request, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Objects,
TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Full
});
var deserializeRequest = JsonConvert.DeserializeObject<HttpRequestMessage>(result, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Objects
});
3条答案
按热度按时间kqhtkvqz1#
我建议只序列化那些在自己的代码库中维护实现的对象。
对于HttpRequestMessage,不尝试序列化它的原因之一是它实现了IDisposable,这意味着它可以保存对非托管资源的引用。你很难用序列化程序预测它的行为。
在这种情况下,我最好使用builder模式:
ctzwtxfj2#
可以使用以下示例代码序列化/反序列化HttpRequest的相关部分。
gwbalxhn3#
问题是StringContent没有默认的构造函数。所以当Json.Net试图创建一个新的StringContent时,它不能。我看了一下写一个自定义的JsonConverter来处理这个问题,但是它也不起作用,因为它看起来不像你可以得到你分配给StringContent的值。
实际上,您需要将HttpRequest消息的输入存储在您自己的自定义类中。