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

时间:2017-10-18 16:08:33

标签: c# json.net

给定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。 其他人如何使用它?

2 个答案:

答案 0 :(得分:3)

可接受的答案应该是commentdbc

在建议转换为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值,如here所述。这样可以方便地验证您是否确实拥有可以使用的JArray。

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

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

答案 1 :(得分:-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; }
    }
}