序列化和反序列化HttpRequestMessage对象 [英] Serialize and deserialize HttpRequestMessage objects
问题描述
任何人都有序列化HttpRequestMessage对象的经验吗?尝试使用Json.net并部分起作用.就是说,由于构造问题StringContent,JsonConvert.DeserializeObject失败:无法找到用于类型System.Net.Http.StringContent的构造函数".
Anyone have experience on serializing HttpRequestMessage objects? Trying with Json.net and it partially works. That said, JsonConvert.DeserializeObject fails due to constructure issues StringContent: "Unable to find a constructor to use for type System.Net.Http.StringContent".
简而言之,这里的用例是我想保存Web请求并在以后出现临时网络问题或服务不可用等情况下发布.
The use case here is in short that I want to save the web request and issue it later, in case of temporary network issues or service unavailability etc..
失败的示例代码:
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
});
推荐答案
可以使用以下示例代码对HttpRequest的相关部分进行序列化/反序列化.
It's possible to serialize/deserialize the relevant parts of an HttpRequest using the following example code.
var request = new HttpRequestMessage(HttpMethod.Post, "http://www.something.com");
request.Content = new StringContent("Hello World!");
var serializedRequestByteArray = new HttpMessageContent(request).ReadAsByteArrayAsync().Result;
var tmpRequest = new HttpRequestMessage();
tmpRequest.Content = new ByteArrayContent(serializedRequestByteArray);
tmpRequest.Content.Headers.Add("Content-Type", "application/http;msgtype=request");
var deserializedRequest = tmpRequest.Content.ReadAsHttpRequestMessageAsync().Result;
这篇关于序列化和反序列化HttpRequestMessage对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!