[英]Deserializing with JSON.net dynamically
我有一个透明的代理,可以在前台和后台之间调整请求,我的透明代理有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);
有什么方法可以验证响应是数组还是仅一个对象?
您可以先使用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
,则可以使用JToken
。
尝试这个!
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.