首页 > 解决方案 > 使用 StreamReader 的 Xamarin.Forms 的 System.ArgumentNullException

问题描述

在我有以下代码从 json 文件中读取public ScenarioPage()ScenarioPage.cs

var assembly = typeof(ScenarioPage).GetTypeInfo().Assembly; 
Stream stream = assembly.GetManifestResourceStream("firstSession.json");

using (StreamReader reader = new StreamReader(stream)) // System.ArgumentNullException
      {
          var json = reader.ReadToEnd();
          List<SessionModel> data = JsonConvert.DeserializeObject<List<SessionModel>>(json); 
          foreach(SessionModel scenario in data)
           {
                    
              label.Text = scenario.title;
              break;
           };

       }

我得到一个 ArgumentNullExceptionstream输入。firstSession.json与 位于同一文件夹中ScenarioPage.cs,并且它被设置为嵌入式资源。似乎 Visual Studio 没有识别出我的 json 文件在那里。这是一个错误吗?还是我的代码有问题?

标签: c#jsonvisual-studioxamarin.forms

解决方案


你把 Json 文件放在哪里,我把它放在 PCL 根目录下的 Json 文件中,如下图所示。 在此处输入图像描述

然后使用以下代码读取 Json 文件。

  void GetJsonData()
        {
            string jsonFileName = "firstSession.json";
            ContactList ObjContactList = new ContactList();
            var assembly = typeof(MainPage).GetTypeInfo().Assembly;
            Stream stream = assembly.GetManifestResourceStream($"{assembly.GetName().Name}.{jsonFileName}");
            using (var reader = new System.IO.StreamReader(stream))
            {
                var jsonString = reader.ReadToEnd();

                //Converting JSON Array Objects into generic list    
                ObjContactList = JsonConvert.DeserializeObject<ContactList>(jsonString);
            }
          
            EmployeeView.ItemsSource = ObjContactList.contacts;
           
        }

这里正在运行 GIF。

在此处输入图像描述

我更新我的演示给你。你可以测试它 https://github.com/851265601/Xamarin.Android_ListviewSelect/blob/master/PlayMusicInBack.zip


推荐阅读