繁体   English   中英

使用JSON.net动态反序列化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM