2016-11-10 76 views
0

我有一個返回Json字符串的Web服務。 我的問題是,我有困難,讀它從webservice讀取多個Json數據

我試着用:

JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); 
      string jsonData = reader.ReadToEnd(); 
      var myobj = jsSerializer.Deserialize<List<CinfoRichiesta>>(jsonData); 

,但我怎樣才能從「生」和「位置」的價值觀? 用JavaScript我用:「var j = jQuery.parseJSON(msg.d);」但我想用C#代碼將是不同

這是字符串的示例:

{"Questions":{ 
    "id":"2", 
    "BOOK":"3", 
     "students":{ 
     "class":"3", 
     "theme","43" 
     }, 
     "locations":{ 
     "h":"0", 
     "L":"3" 
     } 
} 
} 

回答

0

你反序列化到CinfoRichiesta類型的集合,其應該持有的屬性值studentslocations

假設你的JSON格式正確,你的類定義適用於響應

一旦一切都驗證(我建議一倍粘貼整個響應串入json2csharp.com檢查它),你應該能夠看到studentslocations集合國內像這樣:

foreach(Question q in myobj) 
{ 
    Console.WriteLine(q.students.class) 
} 

這應該給你的3結果。

編輯

我覺得你的主要問題是,爲什麼你無法訪問的studentslocations屬性。確保Students是它自己的類這樣:

public class Students 
{ 
    public int class { get; set; } 
    public int theme { get; set; } 
} 

和你locations類應該是:

public class Locations 
{ 
    public int h { get; set; } 
    public int l { get; set; } 
} 

你應該再有一個questions類instaniates都studentslocations,因爲這樣的:

public class Questions 
{ 
    public int id { get; set; } 
    public int book { get; set; } 
    public Student students { get; set; } 
    public Locations locations { get; set; } 
} 

使用JSON反序列化時,重要的是您的對象屬性n ames(即class)根據大小寫匹配響應字符串。所以如果你把它寫成public int Theme,它不會直接映射。

在編碼標準方面有點惱人,但是,嘿嗬:-)

0

首先,你的JSON是無效因此多數民衆贊成第一個問題,你有。例如,您可以在http://jsonlint.com/進行驗證。

我當前已通過以下方式解決了這個問題:

{ 
    "Questions": { 
     "id": "2", 
     "BOOK": "3", 
     "students": { 
      "class": "3", 
      "theme": "na", 
      "43": "na" 
     }, 
     "locations": { 
      "h": "0", 
      "L": "3" 
     } 
    } 
} 

第二類應該是正確的,與當前的JSON這應該是這個樣子

public class Rootobject 
    { 
     public Questions Questions { get; set; } 
    } 

    public class Questions 
    { 
     public string id { get; set; } 
     public string BOOK { get; set; } 
     public Students students { get; set; } 
     public Locations locations { get; set; } 
    } 

    public class Students 
    { 
     public string _class { get; set; } 
     public string theme { get; set; } 
     public string _43 { get; set; } 
    } 

    public class Locations 
    { 
     public string h { get; set; } 
     public string L { get; set; } 
    } 

這一點,你可以反序列化後它是這樣的

var myobj = jsSerializer.Deserialize<List<Rootobject>>(jsonData); 

然後你就可以得到信息n like this

myobj.Questions.students._class 
+0

太棒了非常好 –