12

JSONを解析していますが、次のエラーが発生します。

Newtonsoft.Json.NETdllを使用しています。

文字列の読み取り中にエラーが発生しました。予期しないトークン:StartObject。パス'[0]'、行1、位置2。

これは私が持っているコードです:

public static List<string> GetPluginByCategory(string category)
    {
        var wc = new WebClient();
        var json = wc.DownloadString("http://api.bukget.org/api2/bukkit/category/" + category);
        var list = JsonConvert.DeserializeObject<List<string>>(json);
        return list;
    }

カテゴリは、次の文字列のいずれかになります。

[「管理ツール」、「アンチグリーフィングツール」、「チャット関連」、「開発者ツール」、「経済」、「修正」、「楽しい」、「一般」、「情報」、「力学」、「その他」 、「ロールプレイング」、「テレポート」、「ウェブサイト管理」、「世界の編集と管理」、「世界のジェネレーター」]

編集:これは私が得る応答です:

 [{"description": "Stop users swearing\n", "name": "a5h73y", "plugname": "NoSwear"}, {"description": "Be sure that your server rules are read and accepted!", "name": "acceptdarules", "plugname": "AcceptDaRules"}]

なぜそれが機能しないのか誰かが知っていますか?以前は:/で動作していました。

4

1 に答える 1

23

あなたのjsonは、文字列の配列ではなく、複雑なオブジェクトの配列です。これを試してください(テスト済み):

WebClient wc = new WebClient();
string json = wc.DownloadString("http://api.bukget.org/api2/bukkit/category/Teleportation");

var items = JsonConvert.DeserializeObject<List<MyItem>>(json);

public class MyItem
{
    public string description;
    public string name;
    public string plugname;
}

編集

WebClient wc = new WebClient();
var json = wc.DownloadString("http://api.bukget.org/api2/bukkit/plugin/aboot");

dynamic dynObj = JsonConvert.DeserializeObject(json);
Console.WriteLine("{0} {1}", dynObj.plugname,dynObj.link);
foreach (var version in dynObj.versions)
{
    var dt = new DateTime(1970, 1, 1).AddSeconds((int)version.date);
    Console.WriteLine("\t{0} {1} {2}",version.version, version.download, dt);
}
于 2012-09-11T19:24:57.927 に答える