我正在编写一个程序来访问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"
}
}
我的问题是:有什么方法可以将这类数据放入我可以查询值的列表中?
答案 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; }
}
然后你可以使用:
反序列化jsonJavaScriptSerializer 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