我正在使用一些 JSON 形式的简单股票数据并将其绘制在图表上。一切正常,除了某些条目返回 NULL 值,因为在该特定时刻没有进行交易,因此没有可用的价格数据。这会在图表线上产生缺口。
因此,如果“收盘”值为空,我想排除包括“分钟”和“交易量”在内的整个 block 添加到 ObservableCollection 中,然后继续包含下一个值不为空的 block 。 JSON 示例:
{
"minute": "10:21",
"close": null,
"volume": 0,
},{
"minute": "10:22",
"close": 47.56,
"volume": 6,
}
我创建了一个 jsonSettings 属性,我看到人们谈论它并声称它有效,但它不起作用。代码如下所示:
var jsonSettings = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
MissingMemberHandling = MissingMemberHandling.Ignore
};
string content = await _client.GetStringAsync(url);
var json_Data = JsonConvert.DeserializeObject<ObservableCollection<ChartData>>(content,jsonSettings);
viewModel.LineData = json_Data;
这是我的模型:
public class ChartData
{
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public string minute { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public double? close { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public int volume { get; set; }
}
public class ViewModel
{
public ObservableCollection<ChartData> LineData { get; set; }
public ViewModel()
{
LineData = new ObservableCollection<ChartData>();
}
}
我已经尝试过到处发布的许多类似示例,但空值条目仍然保留在 json_Data 中。有什么想法如何让它发挥作用吗?
谢谢!
最佳答案
NullValueHandling.Ignore
序列化时将忽略模型相关属性的空值。
反序列化时,您可能会考虑反序列化为 IEnumerable<ChartData>
然后使用 Linq 过滤掉您不需要的对象,毕竟是自定义逻辑:“排除 close == null 的对象”。
例如(未经测试的空中代码):
var data = JsonConvert.DeserializeObject<IEnumerable<ChartData>>(content,jsonSettings)
.Where(cd => cd.close != null)
;
var observableData = new ObservableCollection<ChartData>(data);
关于c# - 反序列化 JSON 时需要忽略 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57730528/