Unity使用Get和Post傳遞json數(shù)據(jù)并轉(zhuǎn)換成class對(duì)象
此文寫(xiě)的并不是使用UnityRequest等等Unity自帶的方法。
1、Get方法
public static async Task<string> DoGet(string requestUrl, string parms)
{
string reslut = "";
string uri = ""; // url + "?" + parms;
if (string.IsNullOrEmpty(parms))
{
uri = requestUrl;
}
else
{
uri = requestUrl + "?" + parms;
}
string responseBody = string.Empty;
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Add("Method", "Get");
httpClient.DefaultRequestHeaders.Add("KeepAlive", "false");
httpClient.DefaultRequestHeaders.Add("UserAgent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
HttpResponseMessage response = await httpClient.GetAsync(uri);
response.EnsureSuccessStatusCode();
responseBody = await response.Content.ReadAsStringAsync();
}
return responseBody;
}
調(diào)用:
string u2 = "http://" + ip + "/api/WeatherForecast/GetGameList"; string data2 = await HttpHelper.DoGet(u2, "");
類(lèi)名 info = JsonConvert.DeserializeObject<類(lèi)名>(data2);
2、Post
public static async Task<string> DoPost(string Url, object message) { try { //var res = new T(); string jsonContent = message == null ? "" : JsonConvert.SerializeObject(message); string responseBody = string.Empty; using (HttpClient httpClient = new HttpClient()) { var content = new StringContent(jsonContent, Encoding.UTF8, "application/json"); httpClient.DefaultRequestHeaders.Add("Method", "Post"); HttpResponseMessage response = await httpClient.PostAsync(Url, content); response.EnsureSuccessStatusCode(); responseBody = await response.Content.ReadAsStringAsync(); //res = (T)JsonConvert.DeserializeObject<T>(responseBody); return responseBody; } } catch (Exception ex) { return ""; } }
調(diào)用:
string js = await HttpHelper.DoPost(@"https://****", null); //JObject? result = JsonConvert.DeserializeObject<JObject>(js); 類(lèi)名 info = JsonConvert.DeserializeObject<類(lèi)名>(js);
這樣寫(xiě)主要是省了回調(diào),省得使用消息者模式消息滿(mǎn)天飛。
注意使用await等待時(shí),主線(xiàn)程不會(huì)鎖死,而使用await時(shí),當(dāng)前的方法前要加上async,例子如下。
public async void GetPostData() { string js = await HttpHelper.DoPost(@"***********", null); //JObject? result = JsonConvert.DeserializeObject<JObject>(js); PkgInfo info = JsonConvert.DeserializeObject<PkgInfo>(js); }
在把json數(shù)據(jù)轉(zhuǎn)換成類(lèi)對(duì)象之前,如果需要校驗(yàn),則使用如下方式:
public async void GetPostData() { string js = await HttpHelper.DoPost(@"***********************", null); JObject result = JsonConvert.DeserializeObject<JObject>(js); string errcode = result["errcode"]?.ToString(); string errmsg = result["errmsg"]?.ToString();
//先驗(yàn)證errcode之后,再根據(jù)情況進(jìn)行類(lèi)對(duì)象的轉(zhuǎn)換。 PkgInfo info = JsonConvert.DeserializeObject<PkgInfo>(js); }
小時(shí)候我把老婆種到地下,長(zhǎng)大了我能收獲一大堆老婆!
我是威少,我是一名Unity游戲的主程,我為自己帶鹽,希望此文能給您一點(diǎn)點(diǎn)微不足道的幫助,祝你成功!

浙公網(wǎng)安備 33010602011771號(hào)