c#从JSON中获取子节点
本文关键字:获取 子节点 JSON | 更新日期: 2023-09-27 18:16:26
我的JSON是这样的:
{
"kind": "youtube#videoListResponse",
"etag": "'"sZ5p5Mo8dPpfIzLYQBF8QIQJym0/TOPzMxlQJUtRJBXHeKYMXsdEkHs'"",
"pageInfo":
{
"totalResults": 1,
"resultsPerPage": 1
},
"items":
[
{
"kind": "youtube#video",
"etag": "'"sZ5p5Mo8dPpfIzLYQBF8QIQJym0/BIVqr1Mkbule8othzWvZRor92wU'"",
"id": "QMNkWwq6L4Q",
"contentDetails":
{
"duration": "PT4M45S",
"dimension": "2d",
"definition": "hd",
"caption": "false",
"licensedContent": true,
"projection": "rectangular"
}
}
]
}
格式可能有点不对,对不起。我试着创建一个这样的类:
public class VideoDetails
{
public string kind;
public string etag;
public string id;
public string duration;
public string definition;
public string caption;
public string licensedContent;
public string projection;
}
之后,我反序列化JSON文件:
VideoDetailRead = JsonConvert.DeserializeObject<VideoDetails>(json);
,但我只得到"etag"answers"kind"。什么都没有。我的问题是:我如何读取"项目"下列出的数据?这是我第一次使用JSON,因此我知道的不多。谢谢你的回答。
创建第二个对象来为子数据建模。如果items
属性在contentDetails
下也有一个子属性,那么您还需要另一个对象来反序列化这些属性。
public class VideoDetailsItem
{
public string kind;
public string etag;
public string id;
public VideoContentDetails contentDetails;
}
public class VideoContentDetails
{
public string duration;
public string definition;
public string caption;
public bool licensedContent;
public string projection;
}
为父对象添加一个List<VideoDetailsItem>
。
public class VideoDetails
{
public string kind;
public string etag;
public List<VideoDetailsItem> items;
}
当反序列化JSON对象时,您必须模仿对象中的JSON对象结构。此外,考虑使用属性而不是公共字段,以便在数据对象中进行封装。
您所列出的属性位于名为items
的数组中,因此您的对象层次结构必须与此匹配:
public class VideoList
{
public string kind;
public string etag;
// etc...
public List<VideoDetails> items;
}
public class VideoDetails
{
public string kind;
public string etag;
public string id;
public string duration;
public string definition;
public string caption;
public string licensedContent;
public string projection;
}
:
var videos = JsonConvert.DeserializeObject<VideoList>(json);
这是因为您没有正确地建模对象结构。现在,JSON的结构如下:
{baseInformation, VideoDetailsArray}
因此,您必须将数据对象重构为
public class VideoDetails
{
//Base information
public string kind {get; set;}
public string etag {get; set;}
//...
public List<VideoDetails> {get; set;}
}
你必须定义你的类来匹配JSON的结构:在这种情况下,你会定义items
作为一个单独的类的列表,在它下面有duration
等属性。您应该将VideoDetails
类嵌套在另一个可以在JSON中包装两个对象的类中,并为contentDetails
对象添加另一个类。
Edit
> Paste Special
> Paste JSON as Classes
。这将为您创建正确的结构,并且您可以看到JSON中的嵌套类如何正确地转换为c#类。