c# - 如何反序列化 JSON 数组并将生成的对象绑定(bind)到 WPF DataGrids?

标签 c# json wpf serialization datagrid

给定一个包含两个数组的 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> 类型的值。 .现在,我想在两个 DataGrid 中显示此数据:

<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 添加“Binding”属性,也许还需要向 DataGrid 添加“DataContext”,但我不知道该放什么。大多数绑定(bind)教程都展示了如何绑定(bind)到 StaticResources 或具有属性的类,而不是绑定(bind)到 JSON.Net 反序列化到的 JObject 层次结构。

最佳答案

设置数据上下文

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>

关于c# - 如何反序列化 JSON 数组并将生成的对象绑定(bind)到 WPF DataGrids?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35519945/

相关文章:

javascript - nodejs中的base64 JSON编码字符串

java - 我有一个包含多个 JSON 对象的数据字符串,如何将字符串中的所有 JSON 对象存储在填充对象的数组中?

c# - Entity Framework 6(代码优先)实体版本控制和审计

c# - 使用 ASP.NET 刷新 UpdatePanel 中的 Repeater 控件

c# - 返回包含一个随机项目的 SPListItemCollection

C# 使用 Nancy 获取 HTTP 正文

javascript - 使用高速公路 python 发送 json

c# - 如何在 wpf 中显示完整的 Expander Grid?

c# - 将 Storyboards 制作成 WPF 中多个控件可以使用的资源

c# - 绑定(bind)到 ObservableCollection 的列表框不会更新