从Json List填充TableView

时间:2014-03-12 10:36:49

标签: c# arrays list uitableview xamarin

我正在使用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'
}]

2 个答案:

答案 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 ()