知道哪个属性反序列化JSON的最佳方法?

时间:2017-01-25 22:37:20

标签: json error-handling json.net

我目前正在从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;
    }

但这似乎很尴尬。有人有更好的建议吗?

0 个答案:

没有答案