2013-10-23 55 views
0

我只是構建一個測試Web API,它需要一個JSON負載,並將簡單地從我的MVC控制器發回數組部分中的數據。JSON序列化混淆

這是由我人口稠密類連載我目前的JSON字符串:

{"JobList":[{"ID":1,"Name":"Dave","Age":23,"StartDate":"10/23/2013 6:22:50 AM","JobTitle":"Developer"},{"ID":2,"Name":"John","Age":44,"StartDate":"10/23/2013 6:22:50 AM","JobTitle":"QA"},{"ID":3,"Name":"Dave","Age":23,"StartDate":"10/23/2013 6:22:50 AM","JobTitle":"Senior Developer"}]} 

這是一個用於創建這個JSON對象:

var jobList = new JobsList() 
     { 
      JobList = new List<Jobs>() 
      { 
       new Jobs() 
       { 
        Age = 23, 
        ID = 1, 
        Name = "Dave", 
        StartDate = DateTime.Now.ToString(), 
        JobTitle = "Developer" 
       }, 
       new Jobs() 
       { 
        Age = 44, 
        ID = 2, 
        Name = "John", 
        StartDate = DateTime.Now.ToString(), 
        JobTitle = "QA" 
       }, 
       new Jobs() 
       { 
        Age = 23, 
        ID = 3, 
        Name = "Dave", 
        StartDate = DateTime.Now.ToString(), 
        JobTitle = "Senior Developer" 
       } 
      } 

     }; 

這裏是我的個人類:

JobsList類別:

public class JobsList:IJobList 
{ 
    #region IJobList Members 

    public List<Jobs> JobList 
    { 
     get; 
     set; 
    } 

    #endregion 
} 

職位類別:

public class Jobs:Interfaces.IJobs 
{ 

    #region IJobs Members 

    public int ID 
    { 
     get; 
     set; 
    } 

    public string Name 
    { 
     get; 
     set; 
    } 

    public int Age 
    { 
     get; 
     set; 
    } 

    public string StartDate 
    { 
     get; 
     set; 
    } 


    public string JobTitle 
    { 
     get; 
     set; 
    } 

    #endregion 
} 

當我將我的JSON通過使用JSON2Csharp的類產生如圖生產類:

public class JobList 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public string StartDate { get; set; } 
    public string JobTitle { get; set; } 
} 

public class RootObject 
{ 
    public List<JobList> JobList { get; set; } 
} 

這對我來說似乎不正確。任何人都可以解釋爲什麼我沒有得到我的JSON設置爲JobsList數組中的'Jobs'節點?爲什麼生成的JSON2CSharp類將我的'作業'類映射爲JobList類?

+1

如果你已經有需要的類(反)序列化JSON的,你爲什麼要使用JSON2Csharp? –

+0

@ LasseV.Karlsen它的興趣遠遠超過了任何東西,但是當生成的類似乎與我的不同時 - JSON字符串與我期望的略有不同 - 我不明白爲什麼它以這種方式映射。 – user1352057

+1

從我所知道的看,這看起來更像是JSON2Csharp解析列表的能力問題。真的,只要你的程序可以序列化/反序列化你的JSON,你應該沒問題。 (另外,如果JSON2CSharp *確實*拿起你的作業節點,它可能會被稱爲「ChildObject」,因爲它不能從該序列化的JSON中知道你的類的名稱) – valverij

回答

0

基本上,這是因爲反序列化器(在這種情況下,JSON2CSharp)不知道你命名你的原始類。或者你如何組織他們,就此而言。它不知道你在「我目前的JSON字符串」下面發佈的任何東西。

當你把它交給JSON對象時,這就是它所使用的所有信息。因此,它可以告訴我們有某種對象(稱之爲「RootObject」),它有一個名爲「JobList」的對象數組。所以它稱爲類「JobList」。它有一個選擇 - 它可以簡單地稱爲列表「JobList」並將對象命名爲其他內容......但它無法知道它最初來自名爲「Jobs」的對象,因爲它不在JSON。一個不同的解串器可能做得不同。

我對JSON2CSharp沒有特別的瞭解,所以我不知道它是否可以做到這一點,但是有一些框架在給定對象定義的情況下可以用一致的命名字段解析JSON字符串並將其加載到該對象中。例如,對於Json.NET,你可以做這樣的事情:

JobsList jobList = JsonConvert.DeserializeObject<JobsList>(JsonString);