C# 使用Json.NET进行解析:";意外标记:StartObject";

C# 使用Json.NET进行解析:";意外标记:StartObject";,c#,json,json.net,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:

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

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

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


请发布从服务器收到的确切JSON数据。不管出于什么原因,它都可能不是“字符串数组”。(实际上,看到响应很长,可以发布一个短消息,但根据显示相同错误的响应的预期版本应该是有效的。错误是JSON.NET正在查找一个
{
,它期望字符串开始。列表映射到
[“a”,“b”,“etc”]
而数据是
[{someobj1}、{someobj2}、{etc}]
)我得到了一小段代码:[{“描述”:“停止用户咒骂”;“名称”:“a5h73y”,“plugname”:“NoSwear”},{“描述”:“确保您的服务器规则已被读取并接受!”,“名称”:“acceptdarules”,“plugname”:“acceptdarules”}在主要帖子中更新(别忘了在最后添加一个
]
,让它成为一个有代表性的示例)。当它“用于工作”时,来自服务器的数据是一样的吗?可能是改变了吗?帖子中的“用于工作”让我很反感;有没有办法让Json.NET将复杂值“填充”到字符串中(作为Json)?可能是一个转换器?@pst您可以使用
List
type对列表中的每一项进行反序列化并调用ToString()。这将返回类似
{“description”:null,“name”:“abitofrealism”,“plugname”:“abitofrealism”}
是的,我就是这么想的。无论如何,问题似乎是“API更改”所以也就不足为奇了。嗯……这可能是一个愚蠢的问题,但是,我不能用这段代码从一个插件检索数据,比如这段:
http://api.bukget.org/api2/bukkit/plugin/aboot
@FoxyShadoww您的新url返回一个完全不同的json字符串。您应该使用不同的类(或
dynamic
)以反序列化此响应。
 [{"description": "Stop users swearing\n", "name": "a5h73y", "plugname": "NoSwear"}, {"description": "Be sure that your server rules are read and accepted!", "name": "acceptdarules", "plugname": "AcceptDaRules"}]
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);
}