Sérialiser et désérialiser des objets HttpRequestMessage
Quelqu'un a une expérience sur la sérialisation HttpRequestMessage objets? Essayer avec Json.net et il fonctionne partiellement. Cela dit, JsonConvert.DeserializeObject échoue en raison de constructure questions StringContent: "Impossible de trouver un constructeur à utiliser pour le type de Système.Net.Http.StringContent".
Le cas d'utilisation voici en bref que je veux enregistrer la requête web et de la question plus tard, en cas de temporaire des problèmes de réseau ou de service indisponibilité etc..
Exemple de code qui est un échec:
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
});
Vous devez vous connecter pour publier un commentaire.
Je dirais la sérialisation des seuls objets pour lesquels vous maintenir en œuvre dans votre propre code.
Pour HttpRequestMessage l'une des raisons de ne pas essayer de la sérialisation c'est le fait qu'il met en œuvre IDisposable, ce qui signifie qu'il peut contenir des références à des ressources non managées. Vous ne pouvez pas prédire son comportement avec les sérialiseurs.
Dans ce cas, je ferais mieux d'aller avec un générateur de modèle:
Le problème est que StringContent n'a pas de constructeur par défaut. Alors, quand Json.Net essaie d'aller créer un nouveau StringContent il ne peut pas. J'ai pris un coup d'oeil à écrire un personnalisé JsonConverter pour gérer cela, mais qui ne fonctionne pas, soit parce qu'il n'apparaît pas que vous pouvez obtenir à la valeur attribuée à StringContent. I. e.
Essentiellement, vous aurez besoin de stocker les données d'entrée pour vous HttpRequest message dans votre propre classe.
Il est possible de sérialiser/désérialiser les parties concernées d'un HttpRequest à l'aide de l'exemple de code suivant.
https://username:[email protected]