c# - 反序列化 JSON 时需要忽略 NULL 值

标签 c# json xamarin json.net

我正在使用一些 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/

相关文章:

c# - 在 Visual Studio 中使用 WPF 时,如何使 List<Object> 变量出现在 DataBinding UI 中?

c# - 不使用 Task.Result 的异步/等待死锁

javascript - 在 Javascript 中使用 map 函数返回新值

javascript - 使用 Angular 过滤 $http json 数据

mysql - Rails with mysql "Unknown type ' json' for column 'special_info' "

xaml - 在 Xamarin.Forms 中将 HeightRequest 设置回 Auto

c# - iOS 上的 MonoGame 和 MonoTouch - 横向

c# - UWP 获取文件的 shell 图标

c# - 如何使用 visual studio 和 xamarin 关闭 android Activity

c# - Xamarin:不传播任务引发的异常