【问题标题】:Visual Studio Find Int Value Greater than 2147483647 in JSON fileVisual Studio 在 JSON 文件中查找大于 2147483647 的 Int 值
【发布时间】:2017-12-29 21:38:24
【问题描述】:

在将一些 JSON 反序列化为 C# 对象时,我的 Int32 属性之一开始出现 System.OverflowException:值太大或太小。我能够将有问题的 json 保存到文件中以进一步检查它并在单元测试中重现错误。真的不应该有这么大或小的价值进来;我需要找到具有这个大值的特定 JSON 属性(以使基础属性变长)。问题是大约有 5000 行要排序。

根据我的研究,Visual Studio Find RegEx 似乎不太适合这种情况,因为它们似乎不大于或小于运算符。在此文件中搜索大于 2147483647 的值的最佳方法是什么?

示例 Json:

"id": "pmanc",
"operation": "UPDATE",
"ResourceIAQStats": {
  "resourceId": "pmanc",
  "resourceName": "Peter Manc",
  "resourceState": 7,
  "durationInStateMillis": 113888,
  "nHandledContacts": 68,
  "nPresentedContacts": 68,
  "avgTalkDuration": 181324,

编辑

这是我解析 JSON 的 C# 方法,尝试将 JArray Children 反序列化为通用对象时发生溢出异常。 Newtonsoft 没有指定哪个对象(或属性)太大。

    public async Task<List<T>> GetStatsAsync<T>(string testJson)
    {
        var requestResult = JArray.Parse(testJson);
        return new List<T>(requestResult.Children()
            .Select(jo => jo[typeof(T).Name].ToObject<T>()));
    }

【问题讨论】:

  • 为什么不直接吐出关于对象的其他信息,比如 ID?它会在出现异常之前记录 ID,然后你就会找到罪魁祸首。
  • @BrandonMiller:这样做可能需要修改库代码。
  • @BenVoigt 我不确定你的意思。你可以在大约 10 分钟或更短的时间内在控制台应用程序中模拟类似的东西。只需逐个迭代您的对象并尝试反序列化它。至少,您至少会在违规对象之前找到对象。
  • 您是否从 Newtonsoft 收到错误消息?通常,罪犯会在例外中的某处列出。您是否在捕获内部异常?
  • @BrandonMiller:为此,您需要编写一个能够将 JSON 分离为其各个对象的解析器...

标签: c# json visual-studio visual-studio-2015


【解决方案1】:

假设您没有很多其他 10 位以上的数字序列,您能否搜索 \d{10}

【讨论】:

    【解决方案2】:

    我不明白您为什么认为必须在 Visual Studio 中执行此操作。通过 JSON 对象递归,收集路径并在值大于您的阈值时打印路径应该是微不足道的(少于 10 行)Javascript。

    您会发现此问答很有用:Iterate through object properties

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      • 2019-05-31
      • 2015-12-15
      相关资源
      最近更新 更多