gpt4 book ai didi

c# - Json 对象到 xamarin ListView

转载 作者:太空宇宙 更新时间:2023-11-03 12:02:06 25 4
gpt4 key购买 nike

我是 xamarin 和 json 的新手,但我已经到了我的 php 服务器通过互联网浏览器得到响应的地步,下面是 json 代码,我知道它是一个对象数组,我为使用 visual studio 选项中的选项的对象(编辑->过去特殊->过去 JSON 作为类)我只找到如何做一个登录系统,但我想做的是在 ListView 上查看数据。对不起我的错英语 。

{
"error": false,
"users": [
{
"idCustomer": 38,
"firstname": "Dxxxx",
"surname": "Cxxxxx",
"gamertag": "Mxxxx",
"email": "dpxxxxx@xxxxxl.com",
"mobile": "012xxxxxx"
},
{
"idCustomer": 36,
"firstname": "Pxxxxx",
"surname": "Axxxxxx",
"gamertag": "Mxxxxxxx",
"email": "pxxxxxx@xxxxxxx.com",
"mobile": "0728468780"
},
{
"idCustomer": 37,
"firstname": "Dxxxxxx",
"surname": "Dxxxxxx",
"gamertag": "Axxxxxxxx",
"email": "txxxxxxx@xxxxxl.com",
"mobile": "011xxxxxxx"
},
{
"idCustomer": 39,
"firstname": "Exxxxxx",
"surname": "Axxxxxxx",
"gamertag": "Cxxxxxxx",
"email": "exxxxxx@xxxxxxxx.com",
"mobile": "012xxxxxxx"
},
{
"idCustomer": 40,
"firstname": "Cxxxxxx",
"surname": "Axxxxxxx",
"gamertag": "Bxxxxxxx",
"email": "cxxxxxxx.xxxxxxx@xxxxxxx.com",
"mobile": "012"
},
{
"idCustomer": 41,
"firstname": "Lenard",
"surname": "Neemoid",
"gamertag": "Gamers",
"email": "email@email.com",
"mobile": "10214785"
},
{
"idCustomer": 42,
"firstname": "Lenard",
"surname": "Nemoi",
"gamertag": "Spack",
"email": "email@email.com",
"mobile": "123456789"
},
{
"idCustomer": 43,
"firstname": "test",
"surname": "test",
"gamertag": "test",
"email": "test@test.com",
"mobile": "123456789"
},
{
"idCustomer": 44,
"firstname": "test",
"surname": "tees",
"gamertag": "tes",
"email": "ttess",
"mobile": "11222456"
},
{
"idCustomer": 51,
"firstname": "Dxxxxxxx",
"surname": "Lxxxxxxx",
"gamertag": "Sxxxxxxx",
"email": "Dxxxxxxx.Lxxxxxxx@Sxxxxxxx.com",
"mobile": "1234567890"
}
]
}

我已经使用了这段代码,但我确实收到了一个错误

namespace LANApp
{
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
private ListView list_user;
private Button bnt_get_data;

private ArrayAdapter<string> adapter;
private SynchronizationContext sc;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);

list_user = FindViewById<ListView>(Resource.Id.list_user);
bnt_get_data = FindViewById<Button>(Resource.Id.bnt_get_data);

adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleDropDownItem1Line);
adapter.Add("No Data Yet");
list_user.Adapter = adapter;

sc = SynchronizationContext.Current;
bnt_get_data.Click += Bnt_get_data_Click;
}

private void Bnt_get_data_Click(object sender, EventArgs e)
{
getJSON();
}


private async void getJSON()
{
adapter.Clear();

IRestClient client = new RestClient("http://192.xxx.xxx.xxx/Laxxxxxx/public");
IRestRequest request = new RestRequest("allusers/", Method.GET);

try
{
await Task.Run(() =>
{
IRestResponse<List<User>> response = client.Execute<List<User>>(request);
foreach(var user in response.Data)
{
sc.Post(new SendOrPostCallback(o =>
{
adapter.Add(o as string);
adapter.NotifyDataSetChanged();
}), user.gamertag);
}
});
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
return;
}
}
}

错误是未处理的异常:

Java.Lang.NullPointerException:尝试在空对象引用上调用虚方法“java.lang.String java.lang.Object.toString()”

我的用户类看起来像这样

namespace LANApp.Model
{
public class User
{
public int idCustomer { get; set; }
public string firstname { get; set; }
public string surname { get; set; }
public string gamertag { get; set; }
public string email { get; set; }
public string mobile { get; set; }
}

public class RootObject
{
public bool error { get; set; }
public List<User> users { get; set; }
}
}

最佳答案

首先定义一个复杂的对象,您可以将 JSON 反序列化为该对象,它应该看起来像这样:

public class User
{
public int idCustomer { get; set; }

public string firstname { get; set; }

public string surname { get; set; }

public string gamertag { get; set; }

public string email { get; set; }

public string mobile { get; set; }
}

如今,借助 Visual Studio,从 JSON 创建对象非常容易,您可以创建一个新类并复制 JSON 字符串,然后使用:

Edit -> Paste Special -> Paste Json As Classes

这将从您的 JSON 字符串创建一个复杂的对象,就像上面的一样,很简单。

完成后,您可以像这样将 JSON 传递给反序列化器:

using newtonsoft.json

JsonConvert.DeserializeObject<List<User>>(jsonString);

进一步阅读:

关于c# - Json 对象到 xamarin ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56644554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com