2017-01-12 48 views
0

トンをデシリアライズに失敗した位置/ praseこのJSON、IVEは試してみて、この作業を行うが、何もそれを行うには思わないし、異なる方法で複数の組み合わせを試してみました... 値の解析中に予期しない文字が検出されました。パス「」、行0、0

コードイム

を使用して

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

jsonは '{'または '[' –

+0

で始まるはずなので、jsonから全体のjQuery0000000000000_0000000000()部分をトリミングする必要があると思いますか? – Offnix

答えて

0

JSONの仕様では、あなたが[は初めを示していることがわかります{は新しいjsonオブジェクトの開始を示します。

あなたのJSON文字列が[で始まる、それは配列だと、それはあなたのクエリ文字列パラメータであるjQuery000000000000000_0000000000(が含まれているため、それは(多くのJSONオブジェクトが含まれてすることができます。あなたはそのゴミのスキームを見つける必要があるクエリ文字列のごみを取り除くためにその後、JSONオブジェクトを処理するために、あなたのJSON文字列は、(それが{で開始している場合は、標準タイプを使用)[で始まる場合、私はJsonConvert.DeserializeObject<T>()メソッドを使用してList<JObject>にあなたの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); 
} 
0

は(関数コールに包まれたJSONである)JSONではなく、JSONP

&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)); 
+0

既にこれを試みました.. throws 404 ...文字列からjQuery0000000000000_0000000000部分を切り詰めようとしました..どちらもうまくいかなかった.. – Offnix

+0

この場合は、呼び出ししようとしているリモートエンドポイントのドキュメントを参照する必要があります。 JSONPではなくJSONを返すように呼び出す方法を見てください。サービスがJSONレスポンスをサポートしていない場合は、関数名をレスポンスから削除してJSONデシリアライザに渡す前に、関数の名前を削除する必要があります。 –

関連する問題