2013-05-15 64 views
0

的json數據是這樣的反序列化嵌套的JSON字符串

"{\"total_entries\":2,\"current_page\":1,\"total_pages\":1,\"per_page\":2,\"items\":[{\"workspace\":{\"background_color\":\"#ffedd3\",\"data_room\":false,\"default_sort\":\"alphabetical\",\"default_view\":\"list\",\"id\":330201,\"name\":\"MyWorkSpaceNew\",\"updated_at\":\"2013-05-08T05:54:25-07:00\",\"root_folder_id\":166325721,\"owner_id\":991101,\"is_owner\":true,\"effective_role\":\"Administrator\",\"audit_trail\":true,\"require_agreement\":false,\"agreement_accepted\":false}},{\"workspace\":{\"background_color\":\"white\",\"data_room\":false,\"default_sort\":\"alphabetical\",\"default_view\":\"list\",\"id\":343316,\"name\":\"qqq\",\"updated_at\":\"2013-05-12T22:34:08-07:00\",\"root_folder_id\":179855446,\"owner_id\":991101,\"is_owner\":true,\"effective_role\":\"Administrator\",\"audit_trail\":true,\"require_agreement\":false,\"agreement_accepted\":false}}]}" 

我想deserilize JSON數據 我的C#代碼就像

workspacename data = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<workspacename>(responseText); 

我想反序列化我得到total_entries的數據, items count,per_page,但在工作區內,我得到的每件東西都是空的

public class workspacename 
{ 
    public int total_entries { get; set; }//getting value 
    public int current_page { get; set; }//getting value 
    public int total_pages { get; set; }//getting value 
    public int per_page { get; set; }//getting value 
    public List<items> items { get; set; }// items count 2 but value null. 

} 

public class items 
{ 
    // public List<workspace> workspace { get; set; } 
    public string background_color { get; set; } 
    public bool data_room { get; set; } 
    public string default_sort { get; set; } 
    public string default_view { get; set; } 
    public int id { get; set; } 
    public string name { get; set; } 
    public DateTime updated_at { get; set; } 
    public int root_folder_id { get; set; } 
    public int owner_id { get; set; } 
    public bool is_owner { get; set; } 
    public string effective_role { get; set; } 
    public bool audit_trail { get; set; } 
    public bool require_agreement { get; set; } 
    public bool agreement_accepted { get; set; } 
} 
+0

請張貼在充分的JSON值,並且還提供工作空間類重現該問題。 – Saravanan

+0

hei我更新了我的代碼現在檢查它 – user2322397

+0

嘿我沒有創建工作區類是否需要? – user2322397

回答

0

us ËDataContractJsonSerializer來代替:

你應該用屬性定義數據類:

[DataContract] 
public class workspacename 
{ 
    [DataMember] 
    public int total_entries { get; set; }//getting value 
    [DataMember] 
    public int current_page { get; set; }//getting value 
... 

[DataContract] 
public class items 
{ 
    [DataMember] 
    public string background_color { get; set; } 
    [DataMember] 
    public bool data_room { get; set; } 
... 

然後deserilize你JSON對象,你應該:

var serializer = new DataContractJsonSerializer(typeof(workspacename)); 
using (var stream = new MemoryStream()) 
{ 
var asBytes = Encoding.UTF8.GetBytes(jsonObjectString); 
stream.Write(asBytes, 0, asBytes.Length); 
stream.Flush(); 
stream.Seek(0, SeekOrigin.Begin); 
var yourDeserializedWorkspacename= (workspacename)serializer.ReadObject(stream); 
} 
+0

它怎麼可能解串器JSON使用datacontractserializer – Saravanan

+0

我敢肯定關於這一點和代碼是完全隨意測試一次:) – hm1984ir

0

隨着Newtonsoft.Json這很簡單:

workspacename obj = JsonConvert.DeserializeObject<workspacename>(inputJson) 

值得關注的是,最好是堅持命名約定:

workspacename => WorkSpaceName 
total_entries => TotalEntries