如何使用JSON来填充的ObservableCollection?

问题描述 投票:1回答:1

如何使用JSON来填充的ObservableCollection?现在只有剧本本身和桌面应用程序的模型。我不明白如何打起来。我得到它运行脚本后:

{
"records": [
    {
        "brand_id": "1",
        "brand_name": "Gigabyte"
    },
    {
        "brand_id": "2",
        "brand_name": "MSI"
    },
    {
        "brand_id": "3",
        "brand_name": "Lenovo"
    },
    {
        "brand_id": "4",
        "brand_name": "Dell"
    },
    {
        "brand_id": "5",
        "brand_name": "Google"
    }
]}

我有一个应用程序模式:

public class Brands
{
    int brand_id;
    string brand_name;

    public int Brand_id { get => brand_id; set => brand_id = value; }
    public string Brand_name { get => brand_name; set => brand_name = value; }
}

与收藏:

public class BrandsCollection
{
    private ObservableCollection<Brands> brands;

    public ObservableCollection<Brands> Brands { get => brands; set => brands = value; }
}
c# php json observablecollection wpfdatagrid
1个回答
0
投票

这是相当简单的,特别是可用于简化了很多的工作包。该NuGet包System.Net.Http将有你需要创建一个HttpClient从Web Get()您的JSON的包。我建议Newtonsoft.Json解析JSON成C#对象。再有,你只需要设置DataGrid.ItemSource是任何类型为它生成列的对象数组对象。

一个简单的例子:

首先,你需要定义你的JSON数据的简单对象表示。例如,如果你有以下数据:

[
  {
    "Name":"Test",
    "Data": ["Item1","Item2"]
  },
  {
    "Name":"Test 2",
    "Data": ["Item3","Item4"]
  }
]

你将不得不创建一个等效C#表示。基本上,这是对象,以便列表:

public class OuterObject : List<InnerObject> {}

内部对象如下:

public class InnerObject {
  public string Name { get; set; }
  public List<string> Data { get; set; }
}

有定义的,你可以做这样的事情的对象:

HttpClient client = new HttpClient { BaseAddress = new Uri("ADDRESS") };
var json = await client.GetAsync("/ENDPOINT");
JsonSerializer serializer = JsonSerializer.CreateDefault();

using (StringReader reader = new StringReader(json))
{
     using (JsonTextReader jsonReader = new JsonTextReader(reader))
     {
          var result = serializer.Deserialize<OuterObject>(jsonReader);
     }
}

然后访问你的程序可以访问它像这样的数据:

string name = result[0].Name;

或者将其设置为DataGrid's ItemSource有数据显示了神奇。

grid1.ItemSource = result;

只要结果是物品的阵列,将创建每个项目的行。您可能需要指定哪些项目显示但通过修改DataGrid.Columns定义和设置DataGrid.AutogenerateColumns = false完成

编辑:有了您的数据和模型

//Just a small change to the Collection
public class BrandsCollection {
    private ObservableCollection<Brands> _records;

    public ObservableCollection<Brands> records { get => _records; set => _records= value; }
}

并分析数据...

JsonSerializer serializer = JsonSerializer.CreateDefault();

using (StringReader reader = new StringReader(json))
{
     using (JsonTextReader jsonReader = new JsonTextReader(reader))
     {
          var result = serializer.Deserialize<BrandsCollection>(jsonReader);
     }
}

你要记住要么使用相同的名称JSON标签或使用JSON属性。有关更多信息,你可以去官方Newtonsoft.Json documentation

© www.soinside.com 2019 - 2024. All rights reserved.