在ListView中显示嵌套的JSON数据(Xamarin.Forms,C#)
我有一个无法解决的问题,希望你能帮助我 在我的Xamarin.Forms应用程序中,我正在下载我希望在ListView中显示的JSON数据 JSON nasted数据如下所示:在ListView中显示嵌套的JSON数据(Xamarin.Forms,C#),c#,.net,xaml,listview,xamarin.forms,C#,.net,Xaml,Listview,Xamarin.forms,我有一个无法解决的问题,希望你能帮助我 在我的Xamarin.Forms应用程序中,我正在下载我希望在ListView中显示的JSON数据 JSON nasted数据如下所示: { "devices": [ { "id": 2, "name": "device1", "owner": { "owner_id": 10, "owner_surname": "XYZ" } }, {
{
"devices": [
{
"id": 2,
"name": "device1",
"owner": {
"owner_id": 10,
"owner_surname": "XYZ"
}
},
{
"id": 3,
"name": "device3",
"owner": {
"owner_id": 12,
"owner_surname": "XVB"
}
}
]
}
我为这些数据设置了这样的类:
public class Items
{
public List<Device> devices { get; set; }
}
public class Device
{
public int id { get; set; }
public string name { get; set; }
public Owner owner { get; set; }
}
public class Owner
{
public int owner_id { get; set; }
public string owner_surname { get; set; }
}
公共类项目
{
公共列表设备{get;set;}
}
公共类设备
{
公共int id{get;set;}
公共字符串名称{get;set;}
公共所有者{get;set;}
}
公共类所有者
{
public int owner_id{get;set;}
公共字符串所有者_姓氏{get;set;}
}
这是我的MainPage.xaml.cs文件:
var client = new WebClient();
client2.Headers.Add("Accept", "application/json");
var content = client.DownloadString(Url);
var tr = JsonConvert.DeserializeObject<List<Items>>(content);
ObservableCollection<Items> trends = new ObservableCollection<Items>(tr);
myList.ItemsSource = trends;
var client=new WebClient();
client2.Headers.Add(“Accept”、“application/json”);
var content=client.DownloadString(Url);
var tr=JsonConvert.DeserializeObject(内容);
可观收趋势=新可观收(tr);
myList.ItemsSource=趋势;
这是我在XAML中的ListView:
<ListView x:Name="myList" HasUnevenRows="true" ItemsSource="{Binding devices}">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text="{Binding name}" TextColor="Black" FontAttributes="Bold"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
此代码不显示任何内容(白色屏幕)。
我想显示第一层嵌套的“名称”和第二层嵌套的“所有者姓氏”。
基于以下内容构建的应用程序:
对stackoverflow的其他响应不起作用:(首先,请在
var tr=JsonConvert.DeserializeObject(content);
检查是否可以从url获取json数据,如果可以从url获取结果
您为listview设置了两个ItemsSource
(请设置其中一个)
和
myList.ItemsSource=trends;
我使用了您的代码(您没有提供url,我必须将json数据放入txt文件,然后读取)。
我可以在listview中获得结果
请注意,我设置了myList.ItemsSource=tr.devices;
如果您只设置了myList.ItemsSource=trends
,则无法在listview中绑定名称
我不能直接反序列化对象列表,它会得到一个异常,
var tr=JsonConvert.DeserializeObject(内容);
我可以用这行代码反序列化对象。
var tr=JsonConvert.DeserializeObject(文本);
这是我的listview代码
<StackLayout>
<!-- Place new controls here -->
<ListView x:Name="myList" HasUnevenRows="true" >
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text="{Binding name}" TextColor="Black" FontAttributes="Bold"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
{
“设备”:[
{
“id”:2,
“名称”:“设备1”,
“所有者”:{
“所有者id”:10,
“所有者姓名”:“XYZ”
}
},
{
“id”:3,
“名称”:“设备3”,
“所有者”:{
“所有者id”:12,
“所有者姓名”:“XVB”
}
}
]
}
嵌套JSON是模型之间关系的结果,例如设备模型与所有者模型相关,因此调用设备模型将级联到相关模型。要访问相关模型的特定属性,请使用点(.)运算符:
<label Text="{Binding Owner.owner_id}"/>
这将给出12…因此访问更深层的嵌套json将是basemodel.property(a).property(B).property(c)
…等等