c# - 如何防止 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);
任何帮助表示赞赏。
解决方案
您可以在类定义中将其设置为可为空的 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
}
推荐阅读
- javascript - 在Electron,javascript中更改保存对话框的默认路径
- laravel - Laravel 密码过期,类不存在
- ruby - 在 Heroku 错误上部署 Rails 网站
- .net - 当文件大小大于 3mb 时,文件下载停止。接收失败 - 网络错误消息 .NET MVC
- r - 纽约数据的 tract_choropleth
- php - 如何使用 PHP MySQL 在数据库中存储任意数量的列的 excel 数据?
- php - php中的函数调用序列在一行中
- ios - UIViewController.init(rootViewController:) 崩溃
- parsing - 从数组中的数组中获取数据的问题
- three.js - 为什么three.js pointcloud在mac和windows(Intel HD graphics 4000)之间的渲染不一样?