Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ListView中显示嵌套的JSON数据(Xamarin.Forms,C#)_C#_.net_Xaml_Listview_Xamarin.forms - Fatal编程技术网

在ListView中显示嵌套的JSON数据(Xamarin.Forms,C#)

在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" } }, {

我有一个无法解决的问题,希望你能帮助我

在我的Xamarin.Forms应用程序中,我正在下载我希望在ListView中显示的JSON数据

JSON nasted数据如下所示:

{
  "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)
…等等