将Newtonsoft JSON的JToken转换为JArray的最佳方法是什么?

tyr*_*ion 6 c# json.net

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

var json = @"{
  ""cities"": [""London"", ""Paris"", ""New York""]
}";
Run Code Online (Sandbox Code Playgroud)

我可以将此JSON读入JObject,方法如下:

var jsonObject = JObject.Parse(json);
Run Code Online (Sandbox Code Playgroud)

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

var jsonCities = jsonObject["cities"];
Run Code Online (Sandbox Code Playgroud)

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

var cities = JArray.FromObject(jsonCities);
Run Code Online (Sandbox Code Playgroud)

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

pek*_*aaw 18

接受的答案应该真正是评论DBC

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

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

...do your thing with JArray...
Run Code Online (Sandbox Code Playgroud)

编辑:

dbc所述,代表 JArray 的 JToken 已经是 JArray。也就是说,如果 JToken.Type 等于JTokenType.Array。如果是这样,可以使用as JArray符号访问它。当as使用铸造符号,无法施放,将呈现一个null值,如解释在这里。这样可以方便地验证您是否确实获得了可以使用的 JArray。

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

在这种情况下,我们知道我们可以简单地从 JToken 转换为 JArray,因此它为我们提供了另一种可能性。我希望它更快,但我把它留给其他人来解决。


Der*_*rek -2

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

下面是一个基本示例。

如需进一步阅读,我将引导您访问 Newtonsoft.Json 网站。

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

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; }
    }
}
Run Code Online (Sandbox Code Playgroud)