簡體   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