如何使用 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()) 两种解析似乎都运行良好,除了涉及数组 "links".

内的对象时

那些确实会成为 class 数组中的对象,但所有数据都是 nullnameurl,就像本例中一样)。

我是不是做错了什么没有正确反序列化 json?

以下是我用作最终目标对象的 classes:

HomeData.cs

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

NavigationLinks.cs

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

NavigationLink.cs

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

同时 PageMeta.cs 正确处理数据。

您错过了链接 class,将链接 class 标记为 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());