C# 分析值j时遇到意外字符。路径'';,第0行,位置0

C# 分析值j时遇到意外字符。路径'';,第0行,位置0,c#,.net,json.net,C#,.net,Json.net,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.Repl

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"}]);

您试图反序列化的不是
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));

在Json规范中,您可以看到
[
表示Json对象的开始数组,而
{
表示新Json对象的开始

json字符串以
[
开头,因此它可以包含更多json对象(因为它是一个数组,包含
jQuery000000000000000\u0000000000)(
这是您的查询字符串参数。要清除查询字符串垃圾,您应该找出垃圾的方案,然后处理json对象。如果您的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);
}
string url=//来自@Darin Dimitrov answer的url
字符串响应=wc.DownloadString(url);
//扔掉垃圾
response=response.Substring(response.IndexOf(“(”)+1);
response=response.Substring(0,response.Length-1);
//应该去掉“jQuery000000000000000\u0000000000(“和最后一次出现的”)”
JObject result=null;
if(response.StartsWith('['))
{
结果=JsonConvert.DeserializeObject(响应)[0];
}
其他的
{
结果=JsonConvert.DeserializeObject(响应);
}

json应该以
{
[
开头,所以我想我必须修剪整个jQuery000000000000000\u 0000000000()json的一部分?已经尝试过了。抛出404…我也尝试过从字符串中删除JQuery000000000\u0000000000部分。这两个部分似乎都不起作用。在这种情况下,您应该查阅您试图调用的远程端点的文档,并查看如何调用它,以便它返回pur json而不是JSONP。如果服务不支持JSON响应您可能需要执行一些字符串操作,以便在将函数名提供给JSON反序列化程序之前从响应中删除函数名。