C# 分析值j时遇到意外字符。路径'';,第0行,位置0
t未能反序列化/使用此json,我尝试了多种组合,使用不同的方法尝试使其工作,但似乎没有任何效果 我正在使用的代码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
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反序列化程序之前从响应中删除函数名。