C# 为HttpClient Post方法准备Json对象
我正在尝试为Post方法准备一个JSON负载。服务器无法解析我的数据<我的值上的code>ToString()方法无法正确地将其转换为JSON,请您建议一种正确的方法C# 为HttpClient Post方法准备Json对象,c#,json,json.net,http-post,dotnet-httpclient,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(), Encod
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;
}
var值=新字典
{
{
“类型”、“a”
}
, {
“卡”、“2”
}
};
var data=newstringcontent(values.ToSttring(),Encoding.UTF8,“application/json”);
HttpClient=新的HttpClient();
var response=client.PostAsync(myUrl,data).Result;
使用(HttpContent=response.content)
{
结果=response.content.ReadAsStringAsync().result;
}
使用此选项。
类似的话题已经很多了。
您需要先使用
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
values.ToString()
将不会创建有效的JSON格式字符串
我建议您使用JSON解析器,例如JSON.Net
或LitJson
将字典转换为有效的JSON字符串。这些库能够使用反射将通用对象转换为有效的JSON字符串,并且比手动序列化为JSON格式要快(尽管如果需要,这是可能的)
请参见此处的JSON字符串格式定义(如果您希望手动序列化对象),以及底部的第三方库列表:您是否查看了
value.ToString()
生成的内容?查看JsonConvert
类。服务器调用的签名是什么样子的?@fran这是一个远程api,我没有机会去看它,它是一个只接受Json的支付网关,不能使用任何其他库。将尝试手动序列化或通过@Nkosi建议的PostAsJsonAsync方法序列化。@RkRBairi我建议的两个选项都使用Json.Net.Worth指出,这两个选项都需要第三方库Json.Net(后者是该库提供的扩展方法)。截至发帖时,Json.Net的下载位置是:@nkosi,只是出于好奇,哪些平台允许使用postsjsonasync?@MiguelMateo看看API文档
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;
}