usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Net;usingSystem.Net.Http;usingSystem.Web.Http;usingNewtonsoft.Json;usingNewtonsoft.Json.Linq;namespaceTransfer.Controllers
{public classTransferController : ApiController
{
[HttpPost]publicHttpResponseMessage Transfer(HttpRequestMessage request)
{string postStr =request.Content.ReadAsStringAsync().Result;
ApiParam param= JsonConvert.DeserializeObject(postStr);string json= "{\"success\":false,\"errorCode\":\"500\",\"errorMessage\":\"参数有误\"}";if (param.Uri == "")
{return new HttpResponseMessage { Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json") };
}
json=TransferManager.Instance.TrasferRequest(param);try{
JObject jobj= JsonConvert.DeserializeObject(json);//把上面的json字符串初步转换为 Jobject对象//Newtonsoft.Json.Linq.JObject jobj = obj as Newtonsoft.Json.Linq.JObject;//把上面的obj转换为 Jobject对象//进一步深度解析复杂json字符串为json通用对象
jobj =ExtractObj(jobj);returnRequest.CreateResponse(HttpStatusCode.OK, jobj);
}catch(Exception ex)
{json= "{\"success\":false,\"errorCode\":\"500\",\"errorMessage\":\"请求接口失败:" + json + "\"}";
Object obj=JsonConvert.DeserializeObject(json);
Newtonsoft.Json.Linq.JObject jobj= obj as Newtonsoft.Json.Linq.JObject;//把上面的obj转换为 Jobject对象
returnRequest.CreateResponse(HttpStatusCode.OK, jobj);
}//return new HttpResponseMessage { Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"),StatusCode= HttpStatusCode.OK };
}///
///深度解析复杂json字符串为json通用对象///
///
///
public staticJObject ExtractObj(JObject job)
{foreach (var item injob)
{try{//得到键当前值
string itemStr =item.Value.ToString();if(itemStr.StartsWith("["))
{//数组只能用数组的转换对象进行转换
JArray itemJArrObj= JsonConvert.DeserializeObject(itemStr);//递归调用
JArray rArrobj =ExtractArrObj(itemJArrObj);//为当前键更新为对象值
job[item.Key] =rArrobj;
}else{//尝试转化为对象(可能失败)
JObject itemJObj = JsonConvert.DeserializeObject(itemStr);//递归调用
JObject robj =ExtractObj(itemJObj);//为当前键更新为对象值
job[item.Key] =robj;
}
}catch{
}
}returnjob;
}//针对json中的数组进行处理
public staticJArray ExtractArrObj(JArray jarr)
{foreach(var item injarr)
{//得到当前值
string itemStr =item.ToString();//尝试转化为对象(可能失败)
JObject itemJObj = JsonConvert.DeserializeObject(itemStr);//递归调用
JObject robj =ExtractObj(itemJObj);
}returnjarr;
}
}
}