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



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

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

我可以将此 JSON 读入 JObject 作为 -

var jsonObject = JObject.Parse(json);

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

var jsonCities = jsonObject["cities"];

在这里,我得到 jsonCities 作为类型 JToken .我知道jsonCities是一个数组,所以我想将其转换为JArray。我现在的做法是这样的——

var cities = JArray.FromObject(jsonCities);

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

接受的答案实际上应该是 dbc 的评论。

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

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

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; }
    }
}

相关内容

  • 没有找到相关文章

最新更新