繁体   English   中英

Json.NET解析对象中的数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM