我有一个透明代理,可以在前台和后台之间进行请求,我的透明代理有4种方法(GET,POST,PUT,DELETE),可以动态地向多个服务发出请求。
我的问题是我不能根据响应反序列化列表或对象。
一个对象:
var client = new WebClient { UseDefaultCredentials = true };
client.Headers.Add(HttpRequestHeader.ContentType, "application/json; charset=utf-8");
var result = JsonConvert.DeserializeObject<Dictionary<String, Object>>(Encoding.UTF8.GetString(client.DownloadData(ConfigurationManager.AppSettings["InternalWebApiUrl"] + "/" + url)));
return Request.CreateResponse(result);
对象列表
var client = new WebClient { UseDefaultCredentials = true };
client.Headers.Add(HttpRequestHeader.ContentType, "application/json; charset=utf-8");
var result = JsonConvert.DeserializeObject<List<Object>>(Encoding.UTF8.GetString(client.DownloadData(ConfigurationManager.AppSettings["InternalWebApiUrl"] + "/" + url)));
return Request.CreateResponse(result);
有没有办法验证响应是数组还是只有一个对象?
答案 0 :(得分:2)
您可以先使用JToken.Parse
解析JSON,然后确定您要处理的内容:
JToken token = JToken.Parse(json);
if (token.Type == JTokenType.Object)
{
Dictionary<string, object> d = token.ToObject<Dictionary<string, object>>();
}
else if (token.Type == JTokenType.Array)
{
List<object> list = token.ToObject<List<object>>();
}
或者,如果您实际上并不关心自己在做什么,可以使用JToken
。
答案 1 :(得分:2)
试试这个!
var client = new WebClient { UseDefaultCredentials = true };
client.Headers.Add(HttpRequestHeader.ContentType, "application/json; charset=utf-8");
var result = JsonConvert.DeserializeObject<Object>(Encoding.UTF8.GetString(client.DownloadData(ConfigurationManager.AppSettings["InternalWebApiUrl"] + "/" + url)));
return Request.CreateResponse(result);