Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用JSON.net动态反序列化_C#_Json_Json.net - Fatal编程技术网

C# 使用JSON.net动态反序列化

C# 使用JSON.net动态反序列化,c#,json,json.net,C#,Json,Json.net,我有一个透明代理,用于在前台和后台之间调谐器请求,我的透明代理有4种方法(GET、POST、PUT、DELETE),可以动态地向多个服务发出请求。 我的问题是无法根据响应反序列化列表或对象 一个对象: var client = new WebClient { UseDefaultCredentials = true }; client.Headers.Add(HttpRequestHeader.ContentType, "application/json; charset=utf-8"); va

我有一个透明代理,用于在前台和后台之间调谐器请求,我的透明代理有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=newwebclient{usedaultcredentials=true};
Add(HttpRequestHeader.ContentType,“application/json;charset=utf-8”);
var result=JsonConvert.DeserializeObject(Encoding.UTF8.GetString(client.DownloadData(ConfigurationManager.AppSettings[“InternalWebApiUrl”]+“/”+url));
返回请求.CreateResponse(结果);
对象列表

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);
var client=newwebclient{usedaultcredentials=true};
Add(HttpRequestHeader.ContentType,“application/json;charset=utf-8”);
var result=JsonConvert.DeserializeObject(Encoding.UTF8.GetString(client.DownloadData(ConfigurationManager.AppSettings[“InternalWebApiUrl”]+“/”+url));
返回请求.CreateResponse(结果);

有没有办法验证响应是一个数组还是一个对象?

您可以使用
JToken解析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-token=JToken.Parse(json);
if(token.Type==JTokenType.Object)
{
字典d=token.ToObject();
}
else if(token.Type==JTokenType.Array)
{
List=token.ToObject();
}
或者,如果你实际上并不关心你在做什么,你可以使用
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);
var client=newwebclient{usedaultcredentials=true};
Add(HttpRequestHeader.ContentType,“application/json;charset=utf-8”);
var result=JsonConvert.DeserializeObject(Encoding.UTF8.GetString(client.DownloadData(ConfigurationManager.AppSettings[“InternalWebApiUrl”]+“/”+url));
返回请求.CreateResponse(结果);

太棒了!似乎对象可以是列表或单个对象!