2017-08-03 177 views
0

我有一个产品数组的JSON,我想以列表形式加载到我的C#程序中,最终将其显示在DataGridView中。从JSON数组填充DataGridView

JSON:

{ 
    "products":[ 
     { 
     "name":"game", 
     "url":"website 1", 
     "cash_price":"£20.00", 
     "category":"Playstation 4 Game" 
     }, 
     { 
     "name":"tv", 
     "url":"website 2", 
     "cash_price":"£200.00", 
     "category":"electronics" 
     } 
    ] 
} 

产品类

class Product 
    { 

     [JsonProperty("name")] 
     public string name { get; set; } 

     [JsonProperty("url")] 
     public string url { get; set; } 

     [JsonProperty("cash_price")] 
     public string cash_price { get; set; } 

     [JsonProperty("category")] 
     public string category { get; set; } 

     [JsonProperty("url")] 
     public string url { get; set; } 

     public static IList<Product> products = new List<Product>(); 
    } 

我运行此代码:

string input = File.ReadAllText(openFileDialog1.FileName); 

var results = JsonConvert.DeserializeObject(input); 
dataGridView1.DataSource = Product.products; 

但在DataGridView,所有我显示的是一个空白格与标题名称,网址,cash_price和类别。网格内没有实际的条目。

我在做什么错?

感谢反序列化一样JsonConvert.DeserializeObject<Product>当你

+0

请不要张贴链接到图像,只是写你得到一个空的网格。此外,请将此标记为WinForms问题。 – dnickless

+0

@dnickless啊对不起,现在全部更新 –

+0

在设置DataSource之前,它看起来并不像是将'Product.products'属性设置为任何东西。 JsonConvert不会为您设置该静态属性 –

回答

0

提供的产品类型。

class ProductList 
{ 
    public List<Product> products { get; set; } 
} 

var result = JsonConvert.DeserializeObject<ProductList>(input); 
dataGridView1.DataSource = result.products; 

你也许可以跳过当属性名的JSON名称完全匹配JsonPropertyAttribute秒 - 这在您的示例中的情况。

+0

感谢您的快速响应。然而,我尝试这样做(添加类等),但现在数据网格视图是完全空白的。标题不再显示,只是一个空白的灰色框。我知道我可能在某个地方犯了一个愚蠢的错误,但我一直在摆弄这个2小时,我不知道该怎么做啊哈 –

+0

我忘了做'列表产品{得到;组; }公共。示例代码更新,并且这次测试:) – Laoujin

+0

嗯我更新了我的代码,但我仍然无法得到任何东西显示,我不明白为什么,有什么办法我可以喜欢join.me你我的屏幕或东西? –