t无法反序列化/删除这个json,我已经尝试了多种不同方法的组合来尝试使这项工作,但似乎没有任何事情......
使用
的代码WebClient wc = new WebClient();
var json = (JObject)JsonConvert.DeserializeObject(wc.DownloadString("http://services.runescape.com/m=website-data/playerDetails.ws?names=[%22" + Username.Replace(" ", "%20") + "%22]&callback=jQuery000000000000000_0000000000&_=0"));
json试图反序列化......
jQuery000000000000000_0000000000([{"isSuffix":true,"recruiting":false,"name":"Sudo Bash","clan":"Linux Overlord","title":"the Troublesome"}]);
答案 0 :(得分:0)
您尝试反序列化的不是JSON
,而是JSONP
(在函数调用中包含JSON)。
从查询字符串中删除此参数:
&callback=jQuery000000000000000_0000000000
你应该选择格式正确的JSON:
var url = "http://services.runescape.com/m=website-data/playerDetails.ws?names=[%22" + Username.Replace(" ", "%20") + "%22]&_=0";
var json = (JObject)JsonConvert.DeserializeObject(wc.DownloadString(url));
答案 1 :(得分:0)
在Json规范中,您可以看到[
表示json对象的开始数组,而{
表示新json对象的开始。
你的json字符串以[
开头,因此它可以包含更多的json对象(因为它是一个数组,它包含jQuery000000000000000_0000000000(
这是你的查询字符串参数。要摆脱查询字符串垃圾你应该找出那个垃圾的方案,然后处理json对象我建议你使用List<JObject>
方法将你的json字符串反序列化为JsonConvert.DeserializeObject<T>()
如果你的json字符串以[
开头(如果以{
开头,则使用标准类型);
示例:
string url = // url from @Darin Dimitrov answer
string response = wc.DownloadString(url);
// getting rid of the garbage
response = response.Substring(response.IndexOf('(') + 1);
response = response.Substring(0, response.Length - 1);
// should get rid of "jQuery000000000000000_0000000000(" and last occurence of ")"
JObject result = null;
if(response.StartsWith('['))
{
result = JsonConvert.DeserializeObject<List<JObject>>(response)[0];
}
else
{
result = JsonConvert.DeserializeObject<JObject>(response);
}