如何反序列化 JSON 数组并将生成的对象绑定到 WPF 数据网格
本文关键字:绑定 对象 WPF 数据 网格 数据网 JSON 反序列化 数组 | 更新日期: 2023-09-27 18:35:36
给定一个包含两个数组的 JSON 文件(假设一个名为"people",一个名为"places"):
{
"people": [{
"name": "Adam",
"age": 24
}, {
"name": "Bill",
"age": 26
}, {
"name": "Charlie",
"age": 28
}],
"places": [{
"city": "San Francisco",
"population": 850000
}, {
"city": "New York",
"population": 8400000
}, {
"city": "Chicago",
"population": 2700000
}]
}
我正在从磁盘加载它并使用 JSON.NET 反序列化 JSON:
using (var sr = new StreamReader(path))
{
var json = sr.ReadToEnd();
_content = JsonConvert.DeserializeObject(json);
}
其中_content是声明为动态的实例变量。解析后,这最终包含类型 System.Collections.Generic.Dictionary<string, object>
的值。现在,我想在两个数据网格中显示此数据:
<DockPanel>
<DataGrid x:Name="leftPane" DockPanel.Dock="Left">
<DataGrid.Columns>
<DataGridTextColumn Header="Name"/>
<DataGridTextColumn Header="Age"/>
</DataGrid.Columns>
</DataGrid>
<DataGrid x:Name="rightPane" DockPanel.Dock="Right">
<DataGrid.Columns>
<DataGridTextColumn Header="City"/>
<DataGridTextColumn Header="Population"/>
</DataGrid.Columns>
</DataGrid>
</DockPanel>
我知道我需要将"绑定"属性添加到DataGridTextColumns,也许还需要为DataGrids添加"DataContext",但我不知道该放什么。大多数绑定教程都展示了如何绑定到 StaticResources 或具有属性的类,但没有绑定到 JSON.Net 反序列化到的 JObject 层次结构。
Set DataContext
public MainWindow()
{
InitializeComponent();
// you will get entries using your code, I hard-coded anonymous objects
Dictionary<string, object> entries = new Dictionary<string, object>();
entries.Add("People", new [] { new { Name = "name1", Age = 24 } });
entries.Add("Places", new[] { new { City = "agra", Country = "India" } });
this.DataContext = entries;
}
XAML
<DataGrid x:Name="leftPane" ItemsSource="{Binding .[People]}">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Age" Binding="{Binding Age}"/>
</DataGrid.Columns>
</DataGrid>