C# Json形式向服务器提交信息或将json对象反序列化为类
首先是Get和Post方法,用于向服务器提交信息或是接收服务器发送的Json字符串,这两个方法转载自https://www.cnblogs.com/zoujinhua/p/10330084.html#4706892,里面很详细的介绍了大部分的代码,但是我刚用的时候不知道为什么不能获取或接收消息,所以自己来写了这篇博客,希望有类似问题的伙伴们可以借鉴
获取、发送Json字符串
新建类(HttpUitls)
public static string Get(string Url)
{
//System.GC.Collect();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Proxy = null;
request.KeepAlive = false;
request.Method = "GET";
request.ContentType = "application/json; charset=UTF-8";
request.AutomaticDecompression = DecompressionMethods.GZip;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream myResponseStream = response.GetResponseStream();
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.UTF8);
string retString = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
if (response != null)
{
response.Close();
}
if (request != null)
{
request.Abort();
}
return retString;
}
public static string Post(string JsonString, string Url, Socket sockClient)
{
var request = (HttpWebRequest)WebRequest.Create(Url);
request.Timeout = 3000;
request.Method = "POST";
request.ContentType = "application/json;charset=UTF-8";
byte[] byteData = Encoding.UTF8.GetBytes(JsonString);
int length = byteData.Length;
request.ContentLength = length;
Stream writer = request.GetRequestStream();
writer.Write(byteData, 0, length);
writer.Close();
try
{
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")).ReadToEnd();
string res = responseString.ToString();
return res;
}
catch
{
sockClient.Close();
return null;
}
}
上面代码直接用就可以啦
主窗口代码:
LoginPackage logindata = new LoginPackage();
logindata.loginCode = UserCode;
logindata.loginPwd = Password;
var serializer = new JavaScriptSerializer();
//序列化成json字符串
string serializedResult = serializer.Serialize(logindata);
string _url = "http://总之就是你要访问的接口的URL啦";
string res = HttpUitls.Post(serializedResult, _url, sockClient);
LoginPackage是我自己新建的类,我要访问登录界面,需要用户名和密码,所以类中包含两项信息,小伙伴们可以自己随意添加,res中就是发送登录信息后服务器返回的json字符串
JavaScriptSerializer好像是一个特殊的命名空间里的,大家可以去官网查一查具体用到什么库
可以用serializer.Deserialize<ObservableCollection<与json字符串格式相同的类>>(res);反序列化得到你想要的信息列表
internal class LoginPackage
{
public string loginCode { get; set; }
public string loginPwd { get; set; }
}
浙公网安备 33010602011771号