首页 > 解决方案 > 如何将 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[] 品牌?

标签: c#arraysjsonjson.net

解决方案


您可以使用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[],因此必须进行反序列化。

演示小提琴在这里


推荐阅读