问题描述
我正在尝试找到一种更本机或更优雅的解决方案,以将HTTP POST参数反序列化为各自的对象.
I am attempting to find a more native or elegant solution for deserializing HTTP POST Parameters into a Respective Object.
当前,我将字符串转换为Dictionary,然后将其序列化为JSON,然后将其反序列化为最终对象.
Currently, I convert the string into a Dictionary, and then Serialize that to JSON and THEN deserialize that to my final object.
示例参数字符串:TotalCost=0.01200&Direction=outbound&HangupCause=NORMAL_CLEARING&From=17272222083&Duration=40&ALegUUID=3a8687ca-ec70-11e3-a328-1f6185b4e849&BillDuration=60&BillRate=0.01200&Machine=true&To=17161234567&AnswerTime=2014-06-05+01%3A14%3A14&StartTime=2014-06-05+01%3A14%3A11&CallUUID=3a8687ca-ec70-11e3-a328-1f6185b4e849&ALegRequestUUID=79e70384-46e2-4d49-9d3e-359be9bef44b&RequestUUID=79e70384-46e2-4d49-9d3e-359be9bef44b&EndTime=2014-06-05+01%3A14%3A54&CallStatus=completed&Event=Hangup
我通过WCF服务中的REST处理此字符串:
I handle this string via REST in a WCF Service:
public void HangupCallback(Stream input)
{
try
{
var data = new StreamReader(input).ReadToEnd();
var postParams = new Dictionary<string, string>();
var rawParams = data.Split('&');
foreach (var param in rawParams)
{
var kvPair = param.Split('=');
var key = kvPair[0];
var value = HttpUtility.UrlDecode(kvPair[1]);
postParams.Add(key, value);
}
var jsonString = JsonConvert.SerializeObject(postParams);
var answerRequest = JsonConvert.DeserializeObject<LogHandler.AnswerRequest>(jsonString);
answerRequest.Timestamp = DateTime.Now;
LogHandler.RecordCallLog(answerRequest);
}
catch (Exception ex)
{
LogHandler.RecordError(new LogHandler.StringError
{
Error = "HangupCallback Error" + ex.Message,
Timestamp = DateTime.Now
});
}
}
推荐答案
我能够将其缩减为5行代码:
I was able to shrink this to 5 lines of code:
var data = new StreamReader(input).ReadToEnd();
var dataNvc = HttpUtility.ParseQueryString(data);
var dataCollection = dataNvc.AllKeys.ToDictionary(o => o, o => dataNvc[o]);
var jsonString = JsonConvert.SerializeObject(dataCollection);
var answerRequest = JsonConvert.DeserializeObject<LogHandler.AnswerRequest>(jsonString);
这篇关于反序列化HTTP POST参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!