web-dev-qa-db-ja.com

Json.NETでの解析:「予期しないトークン:StartObject」

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

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

文字列の読み取りエラー。予期しないトークン: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;
    }

categoryは、次の文字列のいずれかです。

[「管理ツール」、「グリーフィング防止ツール」、「チャット関連」、「開発者ツール」、「エコノミー」、「修正」、「楽しい」、「一般」、「情報」、「メカニズム」、「その他」 、「ロールプレイング」、「テレポーテーション」、「ウェブサイトの管理」、「世界の編集と管理」、「世界のジェネレータ」]

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

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

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

11
Yuki Kutsuya

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);
}
23
L.B