【问题标题】:preparing Json Object for HttpClient Post method为 HttpClient Post 方法准备 Json 对象
【发布时间】:2017-08-31 13:16:05
【问题描述】:

我正在尝试为 Post 方法准备 JSON 有效负载。服务器失败无法解析我的数据。我的值上的ToString() 方法无法正确将其转换为 JSON,您能否建议一种正确的方法。

var values = new Dictionary<string, string>
{
    {
        "type", "a"
    }

    , {
        "card", "2"
    }

};
var data = new StringContent(values.ToSttring(), Encoding.UTF8, "application/json");
HttpClient client = new HttpClient();
var response = client.PostAsync(myUrl, data).Result;
using (HttpContent content = response.content)
{
    result = response.content.ReadAsStringAsync().Result;
}

【问题讨论】:

  • 你看过values.ToString()生成的东西吗?
  • 查看JsonConvert 类。
  • 服务器调用的签名是什么样的?
  • @fran 是一个远程 api,还没来得及看,它是一个只接受 Json 的支付网关

标签: c# json json.net http-post dotnet-httpclient


【解决方案1】:

您需要先使用JsonConvert.SerializeObject手动序列化对象

var values = new Dictionary<string, string> 
            {
              {"type", "a"}, {"card", "2"}
            };
var json = JsonConvert.SerializeObject(values);
var data = new StringContent(json, Encoding.UTF8, "application/json");

//...code removed for brevity

或者根据您的平台,在HttpClient 上使用PostAsJsonAsync 扩展方法。

var values = new Dictionary<string, string> 
            {
              {"type", "a"}, {"card", "2"}
            };
var client = new HttpClient();
using(var response = client.PostAsJsonAsync(myUrl, values).Result) {
    result = response.Content.ReadAsStringAsync().Result;
}

【讨论】:

【解决方案2】:

【讨论】:

  • 谢谢,不能使用任何其他库。将尝试按照@Nkosi 的建议手动或通过 PostAsJsonAsync 方法进行序列化。
  • @RkRBairi 我建议的两个选项都使用 Json.Net。
【解决方案3】:

values.ToString() 不会创建有效的 JSON 格式字符串。

我建议您使用 JSON 解析器,例如 Json.NetLitJson 将您的 Dictionary 转换为有效的 json 字符串。这些库能够使用反射将通用对象转换为有效的 JSON 字符串,并且比手动序列化为 JSON 格式更快(尽管如果需要也可以这样做)。

请在此处查看 JSON 字符串格式定义(如果您希望手动序列化对象),以及底部的第 3 方库列表:http://www.json.org/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    相关资源
    最近更新 更多