JSON数据,以xamarin形式简单显示

JSON数据,以xamarin形式简单显示,json,visual-studio,listview,xamarin.forms,display,Json,Visual Studio,Listview,Xamarin.forms,Display,您好,我有一个很大的JSON文件,它代表了各国以及它们因新冠病毒感染而导致的病例和死亡总数。我只想在AboutPage中显示JSON的数据。我尝试过各种方法,但没有人为我工作。你知道我该怎么工作吗 我给你一小部分的JSON [{ "regionData": [ { "country": "World", "totalCases": 157341642, "ne

您好,我有一个很大的JSON文件,它代表了各国以及它们因新冠病毒感染而导致的病例和死亡总数。我只想在AboutPage中显示JSON的数据。我尝试过各种方法,但没有人为我工作。你知道我该怎么工作吗

我给你一小部分的JSON

[{
  "regionData": [
    {
      "country": "World",
      "totalCases": 157341642,
      "newCases": 651328,
      "totalDeaths": 3278509,
      "newDeaths": 9126,
      "totalRecovered": 135480211,
      "activeCases": 18582922,
      "seriousCritical": 108879,
      "casesPerMil": 20185,
      "deathsPerMil": 420.6,
      "totalTests": 0,
      "testsPerMil": 0,
      "population": 0
    },
    {
      "country": "India",
      "totalCases": 21886556,
      "newCases": 401271,
      "totalDeaths": 238265,
      "newDeaths": 4194,
      "totalRecovered": 17917013,
      "activeCases": 3731278,
      "seriousCritical": 8944,
      "casesPerMil": 15729,
      "deathsPerMil": 171,
      "totalTests": 298601699,
      "testsPerMil": 214596,
      "population": 1391457000
    },  ]
}]
var assembly=typeof(AboutPage).GetTypeInfo().assembly; Stream=assembly.GetManifestResourceStream(“MaybeThisOne.testmodel.json”)

使用(var reader=new System.IO.StreamReader(stream))
{
var json=reader.ReadToEnd();
List mylist=JsonConvert.DeserializeObject(json);
myrootobject=新的ObservableCollection(mylist);
MyListView.ItemsSource=myrootobject;
JsonConvert.DeserializeObject在这部分中,我有一个错误,说不能像方法一样使用。我试图删除括号,但什么也没发生

更新:

我完成了建议的步骤,1.使用json2csharp.com创建C#模型,2.使用newtonsoft反序列化。构建正在进行,应用程序启动,但当我尝试进入创建的页面时,它会终止应用程序,而不会显示任何错误消息

更新2:

我启动了一个新项目,并按照上面的步骤进行操作。我得到的唯一错误是关于第3页。我必须从jsonarray文件夹在shell中调用它。我应该如何做

e.x <ShellContent Title="About" Icon="icon_about.png" Route="AboutPage" ContentTemplate="{DataTemplate local:AboutPage}" />
e.x
请告诉我如何从jsonarray文件夹调用第3页?提前谢谢

更新3

我已经从零开始了这个项目,它部分工作。唯一的问题是它没有显示所有的绑定字段

有什么想法吗


我使用Newtonsoft.Json 13.0.1将Json数组对象转换为通用列表,我还修改了Json.Json文件,删除外括号。将Json.Json文件构建操作设置为嵌入式资源

{
"regionData": [
  {
    "country": "World",
    "totalCases": 157341642,
    "newCases": 651328,
    "totalDeaths": 3278509,
    "newDeaths": 9126,
    "totalRecovered": 135480211,
    "activeCases": 18582922,
    "seriousCritical": 108879,
    "casesPerMil": 20185,
    "deathsPerMil": 420.6,
    "totalTests": 0,
    "testsPerMil": 0,
    "population": 0
  },
  {
    "country": "India",
    "totalCases": 21886556,
    "newCases": 401271,
    "totalDeaths": 238265,
    "newDeaths": 4194,
    "totalRecovered": 17917013,
    "activeCases": 3731278,
    "seriousCritical": 8944,
    "casesPerMil": 15729,
    "deathsPerMil": 171,
    "totalTests": 298601699,
    "testsPerMil": 214596,
    "population": 1391457000
  }
]
}
regionData属性包含列表数据,因此您需要创建新的类TestList,contains list regionData属性

 public class TestList
{
    public List<TestModel> regionData { get; set; }
}

public class TestModel
{       
    public string country { get; set; }
    public string totalCases { get; set; }
}
公共类测试列表
{
公共列表区域数据{get;set;}
}
公共类测试模型
{       
公共字符串国家{get;set;}
公共字符串totalCases{get;set;}
}
ContentPage.cs:

  public Page3()
    {
        InitializeComponent();
        TestList modellist = new TestList();
      

        var assembly = typeof(jsonarray.Page3).GetTypeInfo().Assembly;          
        Stream stream = assembly.GetManifestResourceStream("FormsSample.json3.json");
        using (var reader = new System.IO.StreamReader(stream))
        {
            var jsonString = reader.ReadToEnd();

            //Converting JSON Array Objects into generic list               
            modellist = JsonConvert.DeserializeObject<TestList>(jsonString);

            
            listview1.ItemsSource = modellist.regionData;
        }
    }
publicpage3()
{
初始化组件();
TestList modellist=新的TestList();
var assembly=typeof(jsonarray.Page3).GetTypeInfo().assembly;
Stream=assembly.GetManifestResourceStream(“FormsSample.json3.json”);
使用(var reader=new System.IO.StreamReader(stream))
{
var jsonString=reader.ReadToEnd();
//将JSON数组对象转换为通用列表
modellist=JsonConvert.DeserializeObject(jsonString);
listview1.ItemsSource=modellist.regionData;
}
}
最后,我在ListView中获得了列表数据,没有问题

更新:

我的项目名是FormsSample,我在根目录中添加了Json3.json文件,构建操作作为嵌入式资源,您可以看到以下屏幕截图

第3页是一个ContentPage,包含ListView,用于显示Json数据

<ContentPage
x:Class="FormsSample.jsonarray.Page3"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
<ContentPage.Content>
    <StackLayout>
        <ListView x:Name="listview1">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Orientation="Horizontal">
                            <Label Text="{Binding country}" />
                            <Label
                                HorizontalOptions="CenterAndExpand"
                                Text="{Binding totalCases}"
                                VerticalOptions="CenterAndExpand" />
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage.Content>


1.使用json2csharp.com创建一个C#模型,2.使用newtonsoft反序列化,3.使用CollectionView或其他UIYes显示。我做了上述所有工作。请不要在注释中填充代码,你的问题并正确格式化,以使其可读。如果你这样做了,但不起作用,你需要描述问题。只是说“没有人为我工作"不是对您遇到的问题的有用描述。您是否遇到错误或异常?您是否尝试调试代码以确定问题所在?请阅读以获得编写主题问题的指导。对此,我很抱歉,我在原始问题中发布了我用于反序列化的代码。Hello@Cherry BU。我有点困惑我们ing Page3(),以及“FormsSample.json3.json”.你能解释一下我该怎么继续吗?我已经按照你说的创建了一个类测试列表me@NikolaosEfentis我的项目名称是FormsSample,我在根目录中添加了Json3.json文件,将操作构建为嵌入式资源。第3页是一个ContentPage,包含ListView,用于显示json数据。请查看我的更新。您能告诉我如何从中调用第3页吗jsonarray文件夹,在AppShell.xaml?中,我在root中创建了一个新页面,但它不工作,请参阅更新above@NikolaosEfentis你使用Xamarin.shell?你能在github或onedrive上传你的样本吗?我会下载你的样本进行测试,看看你遇到了什么问题。
<ContentPage
x:Class="FormsSample.jsonarray.Page3"
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
<ContentPage.Content>
    <StackLayout>
        <ListView x:Name="listview1">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Orientation="Horizontal">
                            <Label Text="{Binding country}" />
                            <Label
                                HorizontalOptions="CenterAndExpand"
                                Text="{Binding totalCases}"
                                VerticalOptions="CenterAndExpand" />
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackLayout>
</ContentPage.Content>