【问题标题】:Adding json data to a listview将 json 数据添加到列表视图
【发布时间】:2017-12-15 17:07:28
【问题描述】:

我正在尝试使用 api 返回的 json 数据将数据添加到我的列表视图,我有一个具有列表结构的类,但是当我尝试使用 for 循环添加数据时,它会失败并且不会添加它,它会尝试运行一次循环然后退出循环。在期望列表时,它的计数为 0。

ListAvivity.cs

dynamic mFarms = JsonConvert.DeserializeObject(content);

List<MyList.Data> mItems = new List<FarmsList.Data>();

foreach(var items in mFarms.data)
{
  mItems.Add(new MyList.Data() {FarmID = items["FarmID"].ToString(), FarmerSurname = items["FarmerSurname"].ToString(), 
                FarmerForename = items["FarmerForename"].ToString(), FarmName = items["FarmName"].ToString()});
}

MyList.cs

public class MyList
{
    public class Data
    {
        public int FarmID { get; set; }
        public string FarmName { get; set; }
        public string FarmerSurname { get; set; }
        public string FarmerForename { get; set; }
    }

    public class RootObject
    {
        public int code { get; set; }
        public string status { get; set; }
        public string message { get; set; }
        public Data data { get; set; }
    }

}

Json 数据

{
"code": 201,
"status": "Success",
"message": "Object found",
"data": [
    {
        "FarmID": 1,
        "FarmName": "Test1",
        "FarmerSurname": "Test",
        "FarmerForename": "Test"
    },
    {
        "FarmID": 2,
        "FarmName": "Test2",
        "FarmerSurname": "Test",
        "FarmerForename": "Test"
    }
  ]
 }

【问题讨论】:

  • its fails and doesn't add it in. - 那么会发生什么?你有错误吗?这是什么?
  • 没有尝试一次然后跳过它
  • 您展示的示例对我来说效果很好,它循环两倍并正确读取数据。

标签: c# android json listview xamarin.android


【解决方案1】:

程序没有进入循环,因为你无法反序列化 json 对象。我建议您将其反序列化为已知类型,而不是 dynamic

创建 json 类;

public class Datum
{
    public int FarmID { get; set; }
    public string FarmName { get; set; }
    public string FarmerSurname { get; set; }
    public string FarmerForename { get; set; }
}

public class Content
{
    public int code { get; set; }
    public string status { get; set; }
    public string message { get; set; }
    public List<Datum> data { get; set; }
}

然后反序列化它;

var mFarms = JsonConvert.DeserializeObject<Content>(content);
List<MyList.Data> mItems = new List<FarmsList.Data>();

foreach(var items in mFarms.data)
{
  mItems.Add(new MyList.Data() {FarmID = items["FarmID"].ToString(), FarmerSurname = items["FarmerSurname"].ToString(), 
                FarmerForename = items["FarmerForename"].ToString(), FarmName = items["FarmName"].ToString()});
}

另外,要打印mItems,建立一个循环;

foreach (var mitem in mItems)
{
    Console.WriteLine(mitem.FarmID);
    Console.WriteLine(mitem.FarmerSurname);
    //etc
}

【讨论】:

  • 提供的 JSON 绝对反序列化为 dynamic 类型并且循环工作正常。
  • 是的,我试过动态没有问题。但正如我所说,使用已知类型可能会更好。
  • 是的,这是理想的,但它不能回答问题,因为问题与 OP 是否反序列化为动态或类无关。
  • 应用程序在尝试将项目添加到列表时崩溃
  • 错误是什么?能详细介绍一下吗?
猜你喜欢
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多