[英]Deserializing JSON with indexed array in c#
我很擅長使用JSON,並且正在處理從API返回,我無法更改格式。 返回示例是:(已刪除實際網址)
{
"body":
{
"link":
{"linkurl": ["www.google.com"]}
},
"error": null,
"message": "Data Retrieved successfully",
"status": true
}
我在VS2010中使用帶有MVC 3的Newtonsoft.Json庫。
我的班級是:
[JsonObject(MemberSerialization.OptIn)]
public class LinksJSON
{
[JsonProperty]
public string link{ get; set; }
[JsonProperty]
public string message { get; set; }
[JsonProperty]
public string error { get; set; }
[JsonProperty]
public bool status { get; set; }
}
我用以下方法對其進行反序列化:
private static T _download_serialized_json_data<T>(string url) where T : new()
{
using (var w = new WebClient())
{
var json_data = string.Empty;
// attempt to download JSON data as a string
try
{
json_data = w.DownloadString(url);
}
catch (Exception) { }
// if string with JSON data is not empty, deserialize it to class and return its instance
return !string.IsNullOrEmpty(json_data) ? JsonConvert.DeserializeObject<T>(json_data) : new T();
}
}
public string CheckJSONLink()
{
var url = "<api url-removed for security>";
var outObj = _download_serialized_json_data<LinksJSON>(url);
return outObj.Link;
}
但是我試圖獲得linkurl
的值,這是Link
的索引數組。
我該如何訪問這些信息?
你沒有設置你的類來匹配JSON,你的類說link
是一個簡單的字符串,你的例子將它顯示為一個復雜的類型。
為了按預期正確反序列化,您必須修改類以匹配JSON。 具體而言, link
應該是類的實例。
您應該使用以下類:
[JsonObject(MemberSerialization.OptIn)]
public class LinksJSON
{
[JsonProperty]
public body body { get; set; }
[JsonProperty]
public string message { get; set; }
[JsonProperty]
public string error { get; set; }
[JsonProperty]
public bool status { get; set; }
}
[JsonObject(MemberSerialization.OptIn)]
public class body
{
[JsonProperty]
public link link { get; set; }
}
[JsonObject(MemberSerialization.OptIn)]
public class link
{
[JsonProperty]
public string[] linkurl { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.