我正在尝试反序列化一个json对象中的不同项。挣扎着如何基于下面的响应创建一个对象。
{
"a374e91a9f513c79a8961de7c494cf799bbdb35b":{
"rd":[
{
"1":{
"filename":"The Lion King (2019) BluRay 1080p x264 (nItRo)-XpoZ.mkv",
"filesize":1819821931
}
}
]
},
"e999ddbb3e18613476546684e34a4a6b0cfec878":{
"rd":[
{
"1":{
"filename":"The.Lion.King.2019.1080p.BluRay.10bit.x265-HazMatt.mkv",
"filesize":4256678521
}
}
]
},
"8bb877768a0780c9694767a655720927e6cda57e":{
"rd":[]
}
}
我想把它Map到下面的C#结构
var items = JsonConvert.DeserializeObject<List<Item>>(jsonResponse);
Public class Item
{
public string Key {get; set;} // Example a374e91a9f513c79a8961de7c494cf799bbdb35b
public List<Files> Files {get; set;}
}
Public class File
{
public string Id{get; set;} // "1"
public string FileName {get; set;} // The Lion King (2019) BluRay 1080p x264 (nItRo)-XpoZ.mkv
public long FileSize {get; set:} // 1819821931
}
- 更新**
注意,"rd"
属性名称不是固定的字符串,它也可以有不同的值。
2条答案
按热度按时间wixjitnu1#
当你有一个JSON对象带有只在运行时使用的JSON属性名,比如
"a374e91a9f513c79a8961de7c494cf799bbdb35b"
和"1"
,你应该反序列化到字典中。[1]具体来说,为内部对象定义一个类,该类具有静态
Rd
属性,如下所示:(Here为了简洁起见,我使用record,但您也可以使用更传统的
class
样式。)现在您可以执行以下操作:
您还应该从
File
中删除Id
,因为文件ID将是字典键:演示小提琴here。
在这种情况下,消除
Item
并反序列化为Dictionary<string, Dictionary<string, List<Dictionary<string, File>>>>
:演示小提琴#2 here。
[1]参见this answer通过Jon Skeet到 * Deserializing JSON with unknown object names *。
zwghvu4y2#
如果你想把JSON数据Map到你的类,你必须首先解析JSON,然后把它转换成你需要的类
更新
这是未使用“rd”属性名称的版本
输出