C# 如何使用Newtonsoft将json字符串转换为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
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);
数据。第一次会话
将是一个列表
public class Sessions
{
public List<SessionModel> firstSession { get; set; }
}
公开课
{
公共列表第一次会话{get;set;}
}
public class Sessions
{
public List<SessionModel> firstSession { get; set; }
}
公开课
{
公共列表第一次会话{get;set;}
}
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循环中的数据将以红色下划线,并且为nullpublic 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; }
}