我正在使用C#开发适用于iOS的Xamarin项目。
我有一个包含4个项目的Json文件。我希望它们填充TableView,但只显示Json文件中的最后一项。
这是我从Json文件中获取List的方式:
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文件。我只是在一个ViewController中解析它,它工作但不在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 :(得分:0)
我已经使用本文中的示例修复了它:http://www.dotnetperls.com/string-array
对于遇到同样问题的每个人,我的foreach循环现在如下:
foreach(Field item in items)
{
tableItems[item.Id] = item.Value;
}
答案 1 :(得分:0)
你可以利用像LINQ这样的C#功能,并使其成为一个更简单的过程:
table.Source = new TableSource(
JsonConvert.DeserializeObject<List<Field>> (response).
Select (a => a.Value).
ToArray ()
);
您当前代码的问题在于,如果Id不是索引和顺序,则会遇到异常。如果要对项目进行排序,则可以轻松添加排序:
table.Source = new TableSource(
JsonConvert.DeserializeObject<List<Field>> (response).
OrderBy(s => s.Id).
Select (a => a.Value).
ToArray ()