[英]Json.NET parse array in object
我很難解析一個數組中的多個數組,這些數組嵌入在JSON中的多個對象中。
基本上json看起來像
{
took:8,
success:true,
items:[
keywords:{...},
mainInfo:{
name:'...',
expDate:'...',
targetCities:[...],
targetStates:[...]
},
additionalInfo:{
skills:[],
homeTime:''
}
}
我的C#看起來像:
public class Job{
public string name{get;set;}
public List<string> targetCities{get;set;}
public List<string> targetStates{get;set;}
public List<string> skills{get;set;}
public string homeTime{get;set;}
}
public class Jobs{
private JObject o;
private List<Job> jobs;
public Jobs(string json){
this.o=JObject.Parse(json);
}
public List<Job> toList(){
List<JObject> allJobs=o["items"].Select(t => (JObject)t).ToList();
foreach(JObject i in allJobs){
Job j=new Job();
j.name=(string)i["mainInfo"]["name"];
j.targetCities=i["mainInfo"]["targetCities"].Select(t =>(string)t).ToList();
j.targetStates=i["mainInfo"]["targetStates"].Select(t =>(string)t).ToList();
j.expDate=(string)i["mainInfo"]["expDate"]
j.skills=i["additionalInfo"]["skills"].Select(t =>(string)t).ToList();
j.homeTime=(string)i["additionalInfo"]["homeTime"];
this.jobs.Add(j); //ERROR
}
return this.jobs;
}
錯誤是Null Reference Exception
,信息Object reference not set to an instance of an object.
,但是當我嘗試更改代碼以修復該錯誤時,該錯誤似乎幾乎無法預料地跳來跳去。
我絕不是C#或.NET專家。 我過去曾經處理過這種語言,但是我個人並不喜歡這種語言。 因此,請原諒我可能犯的任何愚蠢錯誤。
我基本上是逐步瀏覽所有項目,並嘗試相應地使用數據從每個項目創建Job
對象。
您忘記初始化jobs
字段,即private List<Job> jobs;
如果始終生成作業列表,則不需要此私有字段。 使用局部變量。
public List<Job> toList()
{
jobs = new List<Job>(); //add this line
List<JObject> allJobs = o["items"].Select(t => (JObject)t).ToList();
foreach (JObject i in allJobs)
{
Job j = new Job();
j.name = (string)i["mainInfo"]["name"];
j.targetCities = i["mainInfo"]["targetCities"].Select(t => (string)t).ToList();
j.targetStates = i["mainInfo"]["targetStates"].Select(t => (string)t).ToList();
j.expDate = (string)i["mainInfo"]["expDate"];
j.skills = i["additionalInfo"]["skills"].Select(t => (string)t).ToList();
j.homeTime = (string)i["additionalInfo"]["homeTime"];
this.jobs.Add(j);
}
return this.jobs;
}
我認為您可以先定義allJobs
List<JObject> allJobs = new List<JObject>();
allJobs=o["items"].Select(t => (JObject)t).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.