我正在拨打电话,并收到以下JSON响应:
{
"issues": [{
"id": "250271",
"self": "KeyUrl1",
"key": "Key-8622",
"fields": {
"attachment": [{
"self": "AttachmentUrl1",
"id": "106198",
"filename": "export.htm"
}
],
"customfield_11041": "Test"
}
},
{
"id": "250272",
"self": "KeyUrl2",
"key": "Key-8621",
"fields": {
"attachment": [{
"self": "AttachmentUrl2",
"id": "106199",
"filename": "lmn.htm"
}
],
"customfield_11041": "Test"
}
},
]
}
Run Code Online (Sandbox Code Playgroud)
我使用NewtonSoft Json将其解析为JObject。
var jObject = JObject.Parse(response);
Run Code Online (Sandbox Code Playgroud)
此外,我正在尝试过滤掉缺少附件或没有附件包含“导出”之类文件名的记录。
以下是我编写的代码,理想情况下,它应该在records对象中仅产生1条记录,但是它返回两个对象。
var issues = jObject["issues"] as JArray;
var records = issues.Where(x => !x["fields"]["attachment"].Any() || !x["fields"]["attachment"].Any(y => y["filename"].Contains("export")));
Run Code Online (Sandbox Code Playgroud)
需要帮助找出问题所在。
这是小提琴链接-https: //dotnetfiddle.net/AVyIHr
Jon*_*eet 10
问题是您要调用Contains("export")的结果y["filename"]不是字符串,而是一个字符串JToken。您需要先转换为字符串,然后才能使用所需的格式Contains。
此外,您可以摆脱第一个条件- 没有附件的问题也不会包含任何带有“导出”文件名的附件。
剩下的就是:
var records = issues
.Where(x => !x["fields"]["attachment"].Any(y => ((string) y["filename"]).Contains("export")))
.ToList();
Run Code Online (Sandbox Code Playgroud)
你可能会发现它更简单反序列化的一类,但是-这将减少错别字的风险和这种转换错误的风险。如果反序列化为a,则将List<Issue>具有以下条件:
x => !x.Fields.Attachments.Any(y => y.Filename.Contains("export"))
Run Code Online (Sandbox Code Playgroud)
...我认为比较干净。
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |