c# – 同一模式下的两个同名属性.尝试检索属性值时出错
我试图递归运行Json文件并检索名为“fileName”的属性,然后将该属性的值添加到ListView.但问题是,正如标题所说,同一模式中有两个相同属性的实例,这就是我认为导致错误的原因.
我想忽略包含“spigot.jar”的“fileName”属性,并仅检索包含“spigot-1.7.10-R0.1-SNAPSHOT.jar”的属性. 我试图解析的Json示例(或使用http://ci.md-5.net/job/Spigot/api/json?depth=1作为参考): "artifacts" : [ { "displayPath" : "spigot-1.7.10-R0.1-SNAPSHOT.jar","fileName" : "spigot-1.7.10-R0.1-SNAPSHOT.jar","relativePath" : "Spigot-Server/target/spigot-1.7.10-R0.1-SNAPSHOT.jar" },{ "displayPath" : "spigot.jar","fileName" : "spigot.jar","relativePath" : "Spigot-Server/target/spigot.jar" } ] 我如何尝试解析,并将其添加到C#中的ListView: var url = "http://ci.md-5.net/job/Spigot/api/json?depth=1"; var content = (new WebClient()).DownloadString(url); dynamic json = JsonConvert.DeserializeObject(content); foreach (var builds in json.builds) { string fileName = builds.artifacts.fileName; lvServers.Items.Add(fileName); } 我该如何成功检索“fileName”属性? 解决方法
请尝试以下方法.这将列出构建号加上每个构建的第一个文件名:
var url = "http://ci.md-5.net/job/Spigot/api/json?depth=1"; var content = (new WebClient()).DownloadString(url); JObject root = JObject.Parse(content); var list = root["builds"].Select(b => b["number"].ToString() + " - " + b["artifacts"].Select(a => a["fileName"].ToString()) .FirstOrDefault()); foreach (var fileName in list) { lvServers.Items.Add(fileName); } 演示:https://dotnetfiddle.net/54l8YX 请注意,构建#1603没有工件(我猜是因为该构建的结果是FAILURE)所以文件名为空. 解释上面代码中发生了什么 我正在使用Json.Net的LINQ-to-JSON API(JObjects,JTokens,JArrays等)与System.Linq名称空间( 这是它如何分解: >我首先使用JObject.Parse(内容)将下载的内容解析为JObject. 希望这是有道理的.如果您不熟悉LINQ或lambda表达式,那么代码肯定会有点神秘.下面是一个不使用这些结构的替代版本,但完全相同.理解它可能会容易一些. var url = "http://ci.md-5.net/job/Spigot/api/json?depth=1"; var content = (new WebClient()).DownloadString(url); JObject root = JObject.Parse(content); foreach (JObject build in root["builds"]) { string buildName = build["number"].ToString() + " - "; foreach (JObject artifact in build["artifacts"]) { JToken fileName = artifact["fileName"]; if (fileName != null) { buildName += fileName.ToString(); } break; } lvServers.Items.Add(buildName); } 演示:https://dotnetfiddle.net/vwebrY (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |