c# - 如何将 JToken 转换为字符串 []?
问题描述
我正在尝试将 JObject 中的数组读入 string[] 但我不知道如何。
代码非常简单,如下所示,但不起作用。失败并出现错误无法将 JToken 转换为字符串 []
JObject Items = jsonSerializer.Deserialize<JObject>(jtr);
string[] brands = null;
brands = (string[])Items.SelectToken("Documents[0].Brands");
当我想阅读一个简单的 bool 时,以下内容有效,所以我知道我在正确的地方。
IsAdmin = (bool)Items.SelectToken("Documents[0].IsAdmin");
Documents[0] 中的 JObject 如下所示
{
"id": "961AA6A6-F372-ZZZZ-1270-ZZZZZ",
"ApiKey": "SDKTest",
"ConsumerName": "SDKTest",
"IsAdmin": false,
"Brands": [
"ZZZ"
],
"IsSdkUser": true
}
如何将 Brands 数组读入我的 string[] 品牌?
解决方案
您可以使用JToken.ToObject<T>()
将 a 反序列化为JToken
任何兼容的 .Net 类型,即
var brands = Items.SelectToken("Documents[0].Brands")?.ToObject<string []>();
JToken
对之类的转换操作(bool)Items.SelectToken("Documents[0].IsAdmin")
仅适用于 Newtonsoft 为其提供显式或隐式转换运算符的原始类型,所有这些都记录在JToken 类型转换中。由于没有为 实现这样的转换运算符string[]
,因此必须进行反序列化。
演示小提琴在这里。
推荐阅读
- laravel - Laravel更新关系表不起作用
- android - Charles Proxy 无法在 Android 模拟器上运行:未提供 SNI;请修复你的客户
- dynamics-crm - 是否有关于在 EntityMetadata 中创建实体记录的可能性的任何信息?
- r - 访问R中嵌套列表中具有特定名称的所有列
- kubernetes - 如何使用 kubectl 扩展关于 kubernetes 的守护进程集
- snowflake-cloud-data-platform - 不稳定的“延迟”CTE 评估?
- android - 具有渐变颜色的矢量可绘制不低于 API 24
- reactjs - 通过 API 调用反应循环
- python - 尝试使用 Anaconda 安装 Tensorflow 时出现解析错误
- sql - 按限制 Postgres12 排序的奇怪行为