我正在编写一个程序来访问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["result"]之类的内容。对于其他API调用,我得到了复杂的结构,我不知道如何处理。它基本上是一堆key:value对,但其中一些值也是key:value,不能像我目前所做的那样放入字典中。我对C#还很陌生,所以我不知道该怎么办,有没有其他数据类型,比如Dictionary,没有静态类型?
以下是回应:
{"response":
{
"action":"upload/upload.php",
"doupload":
{
"result":"0",
"key":"89lh7760x4l"
},
"server":"live",
"result":"Success",
"current_api_version":"2.14"
}
}
我的问题是:将这类数据放入一个可以查询值的列表中的好方法是什么?
创建一个新类来处理json怎么样?您可以使用json2csharp生成类,并使用示例json。
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);
我最终发现了dynamic
类型-将文本反序列化为Dictionary<string,dynamic>
允许它有多种类型,其中一些类型也可以是字典。我可以按预期查询它,但我只需要确定每次API调用返回的值,并且我需要将其强制转换为字符串。
string upload_key = (string)json["response"]["doupload"]["key"] //89lh7760x4l