我目前正在从TFS获得类似于以下内容的JSON:
{
"value": [
{
"version": 46874,
"changeDate": "2016-10-27T11:18:37.14Z",
"size"/8,
"hashValue": "ADnOi7g3m13IlYXnt9Q5Qw==",
"path": "$/some/random/file",
"url": "https://example.com/blah"
}, //...
],
"count": 14
}
虽然TFS管理员弄清楚TFS有什么问题,但我已经决定,虽然不受欢迎,但没有文件的大小对项目来说并不重要,我想暂时忽略这个错误。
Google将我引导至question。如果我想忽略所有错误,这没关系。我只想忽略size属性的错误。所以我写了这个错误处理程序:
public void HandleDeserializationError(object sender, Newtonsoft.Json.Serialization.ErrorEventArgs errorArgs)
{
if (errorArgs.ErrorContext.Path.EndsWith(".size"))
errorArgs.ErrorContext.Handled = true;
}
不幸的是,errorArgs.ErrorContext.Path
在解析行value[2].changeDate
时为"size"\8,
。这似乎不对。
我可以在反序列化之前将响应存储在字段中,然后使用errorArgs.ErrorContext.Error.LinePosition
,如下所示:
public void HandleDeserializationError(object sender, Newtonsoft.Json.Serialization.ErrorEventArgs errorArgs)
{
var pos = (errorArgs.ErrorContext.Error as JsonReaderException)?.LinePosition ?? 0;
if (pos > 6 && _parseData.Substring(pos - 6,6) == "\"size\"")
errorArgs.ErrorContext.Handled = true;
}
但这似乎很尴尬。有人有更好的建议吗?