2014-03-12 227 views
0

我正在为C#中的iOS开发Xamarin项目。从Json列表填充TableView

我有一个包含4个项目的Json文件。我希望他们填充TableView,但只显示Json文件中的最后一项。

这是我得到的JSON文件列表:

StreamReader strm = new StreamReader (filePath); 
response = strm.ReadToEnd(); 

List<Field> items = JsonConvert.DeserializeObject<List<Field>>(response); 

为了显示这些项目的TableView中我创建了一个这样的数组:

int count = items.Count; 
string[] tableItems = new string[count]; 

我试图填补该阵列是这样的:

foreach(Field item in items) 
{ 
    tableItems = new string[] { item.Value }; 
} 
table.Source = new TableSource(tableItems); 
Add(table); 

这是TableSource:

public TableSource (string[] items) 
{ 
    TableItems = items; 
} 

这是甚至可能的,我怎样才能实现它,所以我的Json项目是在一个TableView?

编辑

这是Json文件。我分析它只是在一个视图控制器和它的工作,但不是在TableViewController ..

[{ 
'id': 0, 
'type': 'textField', 
'value': 'Vul hier je voornaam in.', 
'extra': '' 
},{ 
'id': 1, 
'type': 'textField', 
'value': 'Vul hier je achternaam in.', 
'extra': '' 
},{ 
'id': 2, 
'type': 'textField', 
'value': 'Vul je gebruikersnaam in.', 
'extra': '' 
},{ 
'id': 3, 
'type': 'textField', 
'value': 'Vul je wachtwoord in.', 
'extra': 'password' 
}] 
+0

你可以发布你试图反序列化的JSON吗? – Dave

+0

我检查了foreach循环中tableItems的长度,它始终为1.问题出现在某处.. –

回答

0

你可以采取的C#的功能,如LINQ的优势,使其成为一个更简单的方法:

 table.Source = new TableSource(
      JsonConvert.DeserializeObject<List<Field>> (response). 
      Select (a => a.Value). 
      ToArray() 
     ); 

您当前的代码存在的问题是,如果Id的索引不是0并且顺序不匹配,您将遇到异常。如果你想分类的项目,那么你可以添加排序很容易:

 table.Source = new TableSource(
      JsonConvert.DeserializeObject<List<Field>> (response). 
      OrderBy(s => s.Id). 
      Select (a => a.Value). 
      ToArray() 
+0

如果我需要从列表中选择多个值并将它与Where函数结合,该怎么办? –

+0

这是一个枚举,所以你可以标记任何你想要的东西。你想让源代码包含Field的集合吗? Hre是一个可能有用的链接:http://msdn.microsoft.com/en-us/library/system.linq.enumerable_methods(v=vs.110).aspx – SKall

+0

已经工作了,谢谢:) –

0

我已经从本文的例子固定它:http://www.dotnetperls.com/string-array

我foreach循环是现在为大家谁具有以下同样的问题:

foreach(Field item in items) 
{ 
    tableItems[item.Id] = item.Value; 
}