簡體   English   中英

如何使用 Newtonsoft.Json 正確反序列化數組中的嵌套對象?

[英]How to correctly deserialize nested object in array with Newtonsoft.Json?

我正面臨這個json數據:

{
    "pagemeta": {
        "slug": "/",
        "title": "test",
        "description": "test"
    },
    "navigationlinks": {
        "links": [{
            "navigationlink": {
                "name": "Index.",
                "url": "/"
            }
        }]
    }
}

並且都使用HttpRespondeMessage.Content.ReadAsJsonAsync<T>(); JsonConvert.DeserializeAnonymousType(jsonString, new MyClassToDeserializeInto())兩種JsonConvert.DeserializeAnonymousType(jsonString, new MyClassToDeserializeInto())似乎都運行良好,除非涉及到數組"links"的對象。

那些確實會成為類中數組中的對象,但所有數據都為nullnameurl像本例中一樣)。

我做錯了什么沒有正確反序列化json嗎?

以下是我用作最終目標對象的類:

HomeData.cs

public sealed class HomeData
    {
        [JsonProperty("pagemeta")]
        public PageMeta PageMeta { get; set; }
        [JsonProperty("navigationlinks")]
        public NavigationLinks NavigationLinks { get; set; }
    }

導航鏈接.cs

public class NavigationLinks
    {
        [JsonProperty("links")]
        public NavigationLink[] Links { get; set; }
    }

導航鏈接.cs

public class NavigationLink
    {
        [JsonProperty("name")]
        public string Name { get; set; }
        [JsonProperty("url")]
        public string Url { get; set; }
    }

同時PageMeta.cs正確處理數據。

您錯過了 Links 類,並將 Links 類標記為 JsonObject

public sealed class HomeData
{
    [JsonProperty("pagemeta")]
    public PageMeta PageMeta { get; set; }
    [JsonProperty("navigationlinks")]
    public NavigationLinks NavigationLinks { get; set; }
}

public class PageMeta
{
    [JsonProperty("slug")]
    public string Slug { get; set; }

    [JsonProperty("title")]
    public string Title { get; set; }

    [JsonProperty("description")]
    public string Description { get; set; }
}

public class NavigationLink
{
    [JsonProperty("name")]
    public string Name { get; set; }
    [JsonProperty("url")]
    public string Url { get; set; }
}

public class NavigationLinks
{
    [JsonProperty("links")]
    public Links[] Links { get; set; }
}

[JsonObject]
public class Links
{
    [JsonProperty("navigationlink")]
    public NavigationLink NavigationLink { get; set; }
}

然后像這樣使用它:

var homedata = JsonConvert.DeserializeAnonymousType(text, new HomeData());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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