如何使用 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 数组中的对象,但所有数据都是 null
(name
和 url
,就像本例中一样)。
我是不是做错了什么没有正确反序列化 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());
我正面临这个 json 数据:
{
"pagemeta": {
"slug": "/",
"title": "test",
"description": "test"
},
"navigationlinks": {
"links": [{
"navigationlink": {
"name": "Index.",
"url": "/"
}
}]
}
}
并且都使用 HttpRespondeMessage.Content.ReadAsJsonAsync<T>();
或 JsonConvert.DeserializeAnonymousType(jsonString, new MyClassToDeserializeInto())
两种解析似乎都运行良好,除了涉及数组 "links"
.
那些确实会成为 class 数组中的对象,但所有数据都是 null
(name
和 url
,就像本例中一样)。
我是不是做错了什么没有正确反序列化 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());