【问题标题】:Deserialize HTTP POST Parameters反序列化 HTTP POST 参数
【发布时间】:2014-06-05 05:36:58
【问题描述】:

我正在尝试寻找一种更原生或更优雅的解决方案,将 HTTP POST 参数反序列化为相应的对象。

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

示例参数字符串: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 处理此字符串:

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
            });
        }
    }

【问题讨论】:

标签: c# json wcf serialization


【解决方案1】:

我能够将其缩减为 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);

【讨论】:

    猜你喜欢
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 2012-09-29
    • 1970-01-01
    相关资源
    最近更新 更多