C# 如何使用Newtonsoft将json字符串转换为json数组?

C# 如何使用Newtonsoft将json字符串转换为json数组?,c#,json,xamarin.forms,C#,Json,Xamarin.forms,我使用此代码读取json文件firstSession.json,并将其显示在标签上 var assembly = typeof(ScenarioPage).GetTypeInfo().Assembly; string jsonFileName = "firstSession.json"; Stream stream = assembly.GetManifestResourceStream($"{assembly.GetName().Name}.{jsonFileNa

我使用此代码读取json文件
firstSession.json
,并将其显示在标签上

var assembly = typeof(ScenarioPage).GetTypeInfo().Assembly;
string jsonFileName = "firstSession.json";
Stream stream = assembly.GetManifestResourceStream($"{assembly.GetName().Name}.{jsonFileName}");
using (var reader = new StreamReader(stream)) 
{
    var json = reader.ReadToEnd(); //json string
    var data = JsonConvert.DeserializeObject<SessionModel>(json);
    foreach (SessionModel scenario in data)
    {
        scenarioName.Text = scenario.title; 
        break;
    }
    scenarioName.Text = data.title; // scenarioName is the name of the label

}
我的json的开头是:

{
  "firstSession": [
    {
      "block": 1,
      "name": "mark",
      "title": "mark's house",
      "numberMissing": 1,
      "word1": "distracted",
      "word2": "None",
      "statement1": "string 1",
      "statement2": "None",
      "question": "question",
      "positive": "No",
      "negative": "Yes",
      "answer": "Positive",
      "type": "Social",
      "format": "Visual",
      "immersion": "picture"
    },
我得到了一个
Newtonsoft.Json.JsonSerializationException:无法将当前Json对象反序列化为类型“MyProject.SessionModel”,因为该类型需要一个Json数组才能正确反序列化。要修复此错误,请将JSON更改为JSON数组或更改反序列化类型,使其成为可以从JSON对象反序列化的普通.NET类型。还可以将JsonObjectAttribute添加到类型中,以强制它从JSON对象反序列化。还可以将JsonObjectAttribute添加到类型中,以强制它从JSON对象反序列化。路径“firstSession”,第2行,位置17。


如何将json字符串转换为json数组?或者进行调试器建议的其他修改之一?

您需要创建一个包装类(json2csharp.com将帮助您完成此操作)

公共类根目录{
公共列表第一次会话{get;set;}
}
然后

var data=JsonConvert.DeserializeObject(json);

data.firstSession
将是一个
列表

您需要创建一个包装类(json2csharp.com将帮助您完成此操作)

公共类根目录{
公共列表第一次会话{get;set;}
}
然后

var data=JsonConvert.DeserializeObject(json);
数据。第一次会话
将是一个
列表

  • 创建一个新类,并将firstSession作为SessionModel的列表

     public class Sessions
     {
         public List<SessionModel> firstSession { get; set; }
     }
    
    公开课
    {
    公共列表第一次会话{get;set;}
    }
    
  • 从SessionModel中删除IEnumerable

    公共类会话模型 { 公共int块{get;set;} 公共字符串名称{get;set;} 公共字符串标题{get;set;}

    }

  • 按如下所示更改去变量化部分

    var data=JsonConvert.DeserializeObject(行); foreach(data.firstSession中的SessionModel场景) { //在这里,您可以获得每个sessionModel对象 Console.WriteLine(scenario.answer)

    }

  • 创建一个新类,并将firstSession作为SessionModel的列表

     public class Sessions
     {
         public List<SessionModel> firstSession { get; set; }
     }
    
    公开课
    {
    公共列表第一次会话{get;set;}
    }
    
  • 从SessionModel中删除IEnumerable

    公共类会话模型 { 公共int块{get;set;} 公共字符串名称{get;set;} 公共字符串标题{get;set;}

    }

  • 按如下所示更改去变量化部分

    var data=JsonConvert.DeserializeObject(行); foreach(data.firstSession中的SessionModel场景) { //在这里,您可以获得每个sessionModel对象 Console.WriteLine(scenario.answer)

    }


  • public class ScenarioObjects:IEnumerable{public List scenarios{get;set;}public IEnumerator GetEnumerator(){throw new NotImplementedException();}}
    我在制作
    JsonConvert.DeserializeObject(json)时也尝试过这个方法和我得到了相同的错误。为什么Root需要是IEnumerable?你为什么称它为“场景”,json属性的名称是“firstSession”,我把它改成了firstSession(见我对你答案的回复)。如果不是IEnumerable,foreach循环中的数据将以红色下划线,并且为null
    public class ScenarioObjects:IEnumerable{public List scenarios{get;set;}public IEnumerator GetEnumerator(){throw new NotImplementedException();}}
    我也尝试过这个方法,在生成
    JsonConvert.DeserializeObject(json)时和我得到了相同的错误。为什么Root需要是IEnumerable?你为什么称它为“场景”,json属性的名称是“firstSession”,我把它改成了firstSession(见我对你答案的回复)。如果它不是IEnumerable,foreach循环中的数据将以红色下划线并为空。我刚刚尝试:
    public class Root:IEnumerable{public List firstSession{get;set;}public IEnumerator GetEnumerator(){throw new NotImplementedException();}}
    并将类型更改为Root,但我也有同样的例外。这可能是由于IEnumerable接口造成的吗?如果未实现,则数据以红色下划线并为null。您不是在迭代根,而是在迭代firstSession,这是一个列表
    foreach(data.firstSession中的SessionModel场景)
    刚刚尝试了这个,我得到了相同的异常,除了
    路径“firstSession[0].block”,第4行,位置14
    对不起--我在SessionModel中删除了IEnumerable,它成功了!非常感谢你的帮助!!!!我刚刚尝试:
    public类Root:IEnumerable{public List firstSession{get;set;}public IEnumerator GetEnumerator(){throw new NotImplementedException();}}
    并将类型更改为Root,但我得到了相同的异常。这可能是由于IEnumerable接口造成的吗?如果未实现,则数据以红色下划线并为null。您不是在迭代根,而是在迭代firstSession,这是一个列表
    foreach(data.firstSession中的SessionModel场景)
    刚刚尝试了这个,我得到了相同的异常,除了
    路径“firstSession[0].block”,第4行,位置14
    对不起--我在SessionModel中删除了IEnumerable,它成功了!非常感谢你的帮助!!!!
    var data = JsonConvert.DeserializeObject<Root>(json);
    
     public class Sessions
     {
         public List<SessionModel> firstSession { get; set; }
     }