[英]Need to ignore NULL values when deserializing JSON
我正在使用JSON形式的一些简单的股票数据,并将其绘制在图表上。 除某些条目返回NULL值外,其他所有方法都工作正常,因为在该特定时间没有进行任何交易,因此没有价格数据。 这会在图表线上产生缺口。
因此,如果“关闭”值为null,我想将包括“分钟”和“音量”在内的整个块排除在ObservableCollection中之外,然后继续添加下一个不为null的值。 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);
我相信序列化设置在“序列化”时更适用,并且当值为null时,您不希望为类的属性生成JSON。 在这种情况下,您要反序列化,因此JSON保持原样。
无论如何,如果由于“ close”为null而需要排除整个对象,则是否排除该属性都无关紧要,您仍然需要检查它。 @Jason不愿做的事情是分别过滤。 像这样:
JArray json = JArray.Parse(@"
[{
""minute"": ""10:21"",
""close"": null,
""volume"": 0,
},{
""minute"": ""10:22"",
""close"": 47.56,
""volume"": 6,
}]
");
var filteredJson = json.Where(j => j["close"].Value<double?>() != null);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.