C# 反序列化HTTP POST参数

C# 反序列化HTTP POST参数,c#,json,wcf,serialization,C#,Json,Wcf,Serialization,我正试图找到一个更自然或优雅的解决方案,将HTTP POST参数反序列化到相应的对象中 目前,我将字符串转换为字典,然后将其序列化为JSON,然后将其反序列化为最终对象 参数字符串示例:TotalCost=0.01200,Direction=outbound&HangupCause=NORMAL_CLEARING&From=17272222083,Duration=40,aleguid=3a8687ca-ec70-11e3-a328-1f6185b4e849,BillDuration=60,Bi

我正试图找到一个更自然或优雅的解决方案,将HTTP POST参数反序列化到相应的对象中

目前,我将字符串转换为字典,然后将其序列化为JSON,然后将其反序列化为最终对象

参数字符串示例:
TotalCost=0.01200,Direction=outbound&HangupCause=NORMAL_CLEARING&From=17272222083,Duration=40,aleguid=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,uid=3a8687ca-ec70-11e3-a328-1f6185b4e794e2-4d49-9d3e-359be9bef44b&RequestUUID=79e70384-46e2-4d49-9d3e-359be9bef44b&EndTime=2014-06-05+01%3A14%3A54&CallStatus=completed&Event=Hangup

我在WCF服务中通过REST处理此字符串:

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
            });
        }
    }
公共无效挂起回调(流输入)
{
尝试
{
var data=新的StreamReader(输入).ReadToEnd();
var postParams=新字典();
var rawParams=data.Split('&');
foreach(rawParams中的var param)
{
var kvPair=param.Split('=');
var key=kvPair[0];
var value=HttpUtility.UrlDecode(kvPair[1]);
postParams.Add(键、值);
}
var jsonString=JsonConvert.SerializeObject(后参数);
var answerRequest=JsonConvert.DeserializeObject(jsonString);
answerRequest.Timestamp=DateTime.Now;
LogHandler.RecordCallLog(应答请求);
}
捕获(例外情况除外)
{
RecordError(新的LogHandler.StringError
{
Error=“HangupCallback Error”+例如消息,
Timestamp=DateTime.Now
});
}
}

我能够将此代码缩减为5行:

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);
var data=newstreamreader(输入).ReadToEnd();
var dataNvc=HttpUtility.ParseQueryString(数据);
var dataCollection=dataNvc.AllKeys.ToDictionary(o=>o,o=>dataNvc[o]);
var jsonString=JsonConvert.SerializeObject(数据收集);
var answerRequest=JsonConvert.DeserializeObject(jsonString);

检查此项-谢谢,我能够将此项调整为更干净的方法=D。