为HttpClient Post方法准备Json Object

时间:2017-08-31 13:16:05

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

我正在尝试为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;
  }

3 个答案:

答案 0 :(得分:6)

您需要先使用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

或者,根据您的平台,使用PostAsJsonAsync上的HttpClient扩展程序。

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

答案 1 :(得分:1)

https://www.newtonsoft.com/json使用此功能。 已经有很多类似的话题了。 Send JSON via POST in C# and Receive the JSON returned?

答案 2 :(得分:1)

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

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

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