如何使用JSON填充ObservableCollection?
How to use JSON to fill ObservableCollection?
如何使用 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; }
}
和Collection:
public class BrandsCollection
{
private ObservableCollection<Brands> brands;
public ObservableCollection<Brands> Brands { get => brands; set => brands = value; }
}
它相当简单,尤其是有可用的包来简化很多工作。 Nuget 包 System.Net.Http
将包含您从网络创建 HttpClient
到 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
如何使用 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; }
}
和Collection:
public class BrandsCollection
{
private ObservableCollection<Brands> brands;
public ObservableCollection<Brands> Brands { get => brands; set => brands = value; }
}
它相当简单,尤其是有可用的包来简化很多工作。 Nuget 包 System.Net.Http
将包含您从网络创建 HttpClient
到 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