首页 > 解决方案 > 如何防止 JSON 解析错误:我的 RootObject 类将属性定义为“long”,但有时我得到一个“object”

问题描述

我正在使用一些 RESTFUL JSON 数据,它工作得很好(这是股市的财务数据)。我已经用其中的所有属性定义了我的类,并将这些属性定义为“字符串”或“长”或“双”等,无论预期结果如何。

我的类中的一个属性称为“marketCap”,它已被定义为“long”类型。但是,取决于我引用的股票代码,而不是“长”,JSON 响应将是“对象”,特别是“空”。

我已将属性定义为:

public long marketCap { get; set; }

这是我偶尔返回的 JSON:

"marketCap":null,

大多数情况下,它会返回适当的长响应,例如:

"marketCap":18393473

当我返回不正确的属性类型时,它会使程序崩溃。

如何在解析数据之前(或在解析数据时)测试 JSON 响应?似乎当我的 RootObject 格式化程序解析 JSON 数据时,它会遇到这个应该是“长”的属性,但它不是,所以它崩溃了。

RootObject priceData = JsonConvert.DeserializeObject<RootObject>(data);

任何帮助表示赞赏。

标签: c#json

解决方案


您可以在类定义中将其设置为可为空的 long。

public long? marketCap { get; set; }

这样做的缺点是您的代码现在必须每次都检查对象是否为空。

if (marketCap != null)
{
  // do something with Convert.ToInt64(marketCap)
}
else
{
  // do what you need to do if null was supplied
}

推荐阅读