解析Json.NET:“意外的令牌:StartObject”

时间:2012-09-11 19:19:29

标签: c# json json.net

我正在解析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;
    }

类别可以是以下字符串之一:

  

[“Admin Tools”,“Anti-Griefing Tools”,“Chat Related”,“Developer Tools”,“Economy”,“Fixes”,“Fun”,“General”,“Informational”,“Mechanics”, “杂项”,“角色扮演”,“传送”,“网站管理”,“世界编辑与管理”,“世界发电机”]

编辑:这是我得到的回复:

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

有人知道它为什么不起作用吗?之前曾经工作过:/。

1 个答案:

答案 0 :(得分:21)

你的json是一个复杂对象的数组,而不是一个字符串数组。试试这个(TESTED):

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