调用接口传递json步骤
1.后端需要进行josn化,就需要引用Newtonsoft.Json此类库
2.利用JsonConvert.SerializeObject()实现类对象的json化
3.通过post方式将json传递给接口,此处需要知道编码格式,例如:utf-8、gbk等,此示例中用的是gbk
代码如下:
//声明一个对象,对象里边包括需要传递的json中的各个属性
PubDwMessage message = PubDwMessage.Create(3);
message.input=row["id"].ToString();
//中间属性赋值部分省略........
//此处将对象序列化为一个json字符串,其中StringEscapeHandling.EscapeNonAscii 将json字符串中的汉字进行了unicode编码,例如汉字张编码后为\u5f20
string serJson = JsonConvert.SerializeObject(message, new JsonSerializerSettings() { StringEscapeHandling = StringEscapeHandling.EscapeNonAscii });
//声明编码格式为gbk
Encoding gbk = Encoding.GetEncoding("gbk");
//创建一个PostInf对象
PostInf PI = new PostInf();
//调用PostJson方法进行接口调用传递json
//reqUrl:接口地址;serJson:json字符串;gbk:编码格式
string result = PI.PostJson(reqUrl, serJson, gbk);
//PsotInf类中的PostJson方法
public string PostJson(string url, string josn, Encoding encoding = null)
{
if (encoding == null)
{
encoding = Encoding.UTF8;
}
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/json";
//
request.Timeout = 30000; //30s
//
Stream streamrequest = request.GetRequestStream();
StreamWriter streamWriter = new StreamWriter(streamrequest, encoding);
streamWriter.Write(josn);
streamWriter.Flush();
streamWriter.Close();
streamrequest.Close();
//设置连接超时时间
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamresponse = response.GetResponseStream();
StreamReader streamReader = new StreamReader(streamresponse, encoding);
string result = streamReader.ReadToEnd();
streamresponse.Close();
streamReader.Close();
return result;
}
如此设置后,可以在调用接口时正确的传递带中文的json数据