簡體   English   中英

在c#中使用索引數組反序列化JSON

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM