使用Json.NET解析复杂的JSON文本

时间:2014-04-13 18:03:32

标签: c# json dictionary json.net

我正在编写一个程序来访问Mediafire的Web API并且一切顺利,剩下的唯一问题是JSON格式的响应文本,我很难解析。

通过API调用(如创建文件夹),我得到一个简单的响应,可以反序列化为Dictionary<string,Dictionary<string,string>>并搜索值:

{"response":
    {
    "action":"folder\/create.php",
    "name":"blargh",
    "folder_key":"mmttuu769djo0",
    "result":"Success",
    "current_api_version":"2.14"
    }
}

我会像这样使用它:

Dictionary<string,string> json = DeserializeJSON(text)["response"];
//DeserializeJSON is a method to shorten:
//JsonConvert.DeserializeObject<Dictionary<string,Dictionary<string,string>>(text)

然后我可以查询json [&#34;结果&#34;]等等。通过其他API调用,我得到了复杂的结构,我不确定如何处理。它基本上是一堆键:值对,但有些值是关键的:值对,它们不能像我目前所做的那样放入字典中。我对C#相当新,所以我不知道该怎么做,是否有其他数据类型如字典没有静态类型?

以下是回复:

{"response":
    {
    "action":"upload\/upload.php",
    "doupload":
        {
        "result":"0",
        "key":"89lh7760x4l"
        },
    "server":"live",
    "result":"Success",
    "current_api_version":"2.14"
    }
}

我的问题是:有什么方法可以将这类数据放入我可以查询值的列表中?

2 个答案:

答案 0 :(得分:2)

如何创建一个新的类来处理json?您可以使用示例json使用json2csharp生成类。

public class Doupload
{
    public string result { get; set; }
    public string key { get; set; }
}

public class Response
{
    public string action { get; set; }
    public Doupload doupload { get; set; }
    public string server { get; set; }
    public string result { get; set; }
    public string current_api_version { get; set; }
}

public class RootObject
{
    public Response response { get; set; }
}

然后你可以使用:

反序列化json
JavaScriptSerializer serializer = new JavaScriptSerializer(); 
var something = serializer.Deserialize<RootObject>(jsonString);

答案 1 :(得分:1)

我最终发现了dynamic类型 - 将文本反序列化为Dictionary<string,dynamic>允许它有多种类型,其中一些也可以是字典。我可以按照我的预期查询它,但我只需要确定每个API调用返回的值是什么,我需要将其转换为字符串。

string upload_key = (string)json["response"]["doupload"]["key"] //89lh7760x4l