16

所以我对编程还很陌生,但我希望能更深入地了解它。我最近开始参与一个项目,为一个在 JSON 中使用 API 系统的网站创建一个 WinForm 程序。

我以前从未使用过 API,所以我不太确定它是如何工作的,但看了几分钟后,我似乎掌握了它的要点。我不明白在 C# 中解析 JSON 是如何工作的。

经过一番谷歌搜索后,我找到 了这个链接。我让它(在某种程度上)与这段代码一起工作。

static void Main(string[] args)
{
        WebClient c = new WebClient();
        var vLogin = c.DownloadString("https://www.openraid.us/index.php/api/login/username/password");
        //Returns string 
        //{"status":1,"error":null,"token":"250-1336515541-c48d354d96e06d488d1a2530071ef07c9532da26"} 
        //Token = random, no decisive length*/
        JObject o = JObject.Parse(vLogin);
        Console.WriteLine("Login Status: " + o["status"]);
        String sToken = "" + o["token"];
        Console.WriteLine(sToken);
        Console.WriteLine("");
        //Breaks after this
        var myRaids = c.DownloadString("https://www.openraid.us/index.php/api/myraids/"+sToken);
        JObject r = JObject.Parse(myRaids); //error occurs here
        String sEventId = "" + r["event_id"];
        Console.WriteLine("Event ID: " + sEventId);
        Console.ReadLine();
}

所以对我来说,看起来我已经完成并处理了第一个页面,但是当我进入第二个页面时,我得到了这个错误。

从 JsonReader 读取 JObject 时出错。当前 JsonReader 项不是对象:StartArray。路径'',第 1 行,位置 1。

所以我想我的问题是,如何解析超过 1 页或 JSON 调用,以及将 JSON 对象的每个部分(例如 、 和 、 分解为 C# 字符串的最简单方法statuserror什么token

4

3 回答 3

45

您是否尝试过使用 JArray?取决于您要返回的对象类型

WebClient client = new WebClient();
var data = client.DownloadString("");
var jArray = JArray.Parse(data);
于 2012-06-28T11:56:21.980 回答
2

JSON 需要括号用于数组和多个对象之间的逗号。

这是根据 JSON 标准。我还建议通过 NuGet 使用 JSON.net而不是本机 JSON 解析器,除非它太过分并且你不能有额外的膨胀。

例如,您使用两个单独的 JSON 对象解析文件 - 以下内容不适用于 JSON 标准(两个对象之间缺少逗号,并且两个对象未用括号封装):

{"status":1,"error":null}
{"status":2,"error":null}

从文件中解析的以下 3 个 JSON 对象确实有效(具有多个对象的括号和对象之间的逗号):

[{"glossary": {"title": "fun glossary","SeeAlso": ["GML", "XML"]},
{"glossary": {"title": "grey glossary","SeeAlso": ["GML", "XML"]},
{"glossary": {"title": "blue glossary","SeeAlso": ["GML", "XML"]}]
于 2012-05-09T01:54:31.873 回答
0

您可以使用 for 循环将每个 JSON 对象(数组)切割成更多对象,C# API 是 System.Json

var jsonArray = JsonArray.Parse(st);//st is the string which contain the JSON objects
foreach (var item in jsonArray) {
    JsonObject ob = new JsonObject(item);
    foreach (var t in ob.Values) {
        JsonObject oo = new JsonObject(t);
        foreach (var x in oo) {
            textBox1.AppendText(x.Key + “ : ” + x.Value + “\n”);
        }
    }
}
于 2012-05-08T22:29:19.807 回答