关于c#:将Newtonsoft JSON的JToken转换为JArray的最佳方法是什么?

What is the best way to convert Newtonsoft JSON's JToken to JArray?

给定JSON中的数组,我正在尝试找到将其转换为JArray的最佳方法。
例如-考虑下面的C#代码:

1
2
3
var json = @"{
 "
"cities"": [""London"",""Paris"",""New York""]
}"
;

我可以将此JSON读取为JObject

1
var jsonObject = JObject.Parse(json);

现在,我将获得"城市"字段。

1
var jsonCities = jsonObject["cities"];

在这里,我得到JToken类型的jsonCities。
我知道jsonCities是一个数组,所以我想将其转换为JArray
我目前的工作方式是这样的-

1
var cities = JArray.FromObject(jsonCities);

我试图找出是否有更好的方法将其转换为JArray。
其他人如何使用它?


接受的答案实际上应该是dbc的注释。

在提议转换为JArray之后,我们可以通过检查null值来验证结果:

1
2
3
4
var jsonCities = jsonObject["cities"] as JArray;
if (jsonCities == null) return;

...do your thing with JArray...

编辑:

如dbc所述,代表JArray的JToken已经是JArray。
也就是说,如果JToken.Type等于JTokenType.Array。如果是这样,可以使用as JArray表示法对其进行访问。使用as强制转换表示法时,强制转换失败将呈现null值,如此处所述。这样便于验证您是否确实拥有可以使用的JArray。

JArray.FromObject(x)需要一个object,因此它可以与任何可以表示为object的东西一起使用,因此可以与JToken一起使用。

在这种情况下,我们知道我们可以简单地从JToken转换为JArray,因此这给了我们另一种可能性。我希望它会更快,但是我把它留给别人去做。


在这里,我们使用c#类通过反序列化字符串来存储jsonString的内容。

以下是一个基本示例。

为了进一步阅读,我将带您到Newtonsoft.Json网站。

https://www.newtonsoft.com/json/help/html/DeserializeObject.htm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Program
{
    static void Main(string[] args)
    {

        var json = @"{""cities"": [""London"",""Paris"",""New York""]}";

        MyObject result = JsonConvert.DeserializeObject<MyObject>(json);

        foreach (var city in result.Cities)
        {
            Console.WriteLine(city);
        }

        Console.ReadKey();
    }

    public class MyObject
    {
        [JsonProperty("cities")]
        public List<string> Cities { get; set; }
    }
}