c# - 如何从.net动态数组对象中获取属性值
问题描述
我有一个 json 文件包含
{
"Accounts": null,
"AccountTypes": null,
"Actions": null,
"Photos": [
{
"Instance": "...",
"Key": "..."
},
....
]
}
现在我想从 Photo 对象中获取所有 Instance 属性。我有以下代码:
var photos = new List<Photo>();
string json = File.ReadAllText(file);
dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json, typeof(object));
var jsonPhotos = jsonObj.Photos as IEnumerable<dynamic>;
var instances = jsonPhotos.Select(x => x.Instance);
foreach (var instance in instances)
photos.Add(new Photo
{
Document = Convert.FromBase64String(instance)
});
但是, jsonPhotos.Select(x => x.Instance); 没有返回任何东西...
我可以使用
var instances = new List<string>();
foreach (var photo in jsonPhotos)
instances.Add(photo.Instance.Value);
但是我可以用 LINQ 的方式解决这个问题吗?
解决方案
为什么不使用Json.Linq
它?将 JSON 解析为JObject
实例,然后将每个标记从Photos
数组映射到Photo
实例(我已省略Convert.FromBase64String
,因为 OP 示例没有有效的 base64 数据,但Instance
可以轻松添加转换值)
var json = JObject.Parse(jsonString);
var photos = json["Photos"]
.Select(token => new Photo
{
Document = token["Instance"]?.Value<string>()
})
.ToList();
推荐阅读
- angular - 如果查询参数有“&”并且在从 url 读取查询参数时它在 & 之后声明了一个新参数怎么办?
- java - 在使用 JFrame 制作 ConnectFour 游戏时,如何使用 MouseListener 或 Painted Discs 来做条件(玩家 1 获胜等)?
- php - PHP中(数组)的用途
- c# - .Net Core“未找到 Http 失败响应 404”错误
- node.js - Mongo:如何查询靠近特定位置的另一个集合中的文档?
- c# - 防止桌面应用程序中的 SQLite 查询和用户可以打开数据库文件是否重要?
- linux - 使用 GhostScript 转换为 CMYK 时,CMY 通道上显示黑色
- mysql - 修复 MySQL JSON 数组意外存储为字符串
- matlab - Matlab-mex 代码中的计数器在预定迭代后不会停止
- php - DateTime 对象如何将年份更改为当前年份