如何使用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; }
}
这是相当简单的,特别是可用于简化了很多的工作包。该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