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