2017-09-28 114 views
0

我仍然不完全確定究竟在問什麼,所以如果這是不適當的道歉構思。我發現的其他問題與已經在JSON中接收對象數組的人有關。反序列化JSON對象到數組或列表

我的JSON字符串作爲一個對象從第三方返回時,我只處理過它返回爲一個數組,它很容易轉換爲過去的對象。

var success = JsonConvert.DeserializeObject<RootObjectClass>(result); gives me a `Cannot deserialize the current JSON object (e.g. {\"name\":\"value\"}) into type 'System.Collections.Generic.List` 

我應該將它轉換爲一個數組,如果又如何,因爲對象是單獨命名一樣的財產「CONTACT_ID」的價值?

否則,有人能指出我如何從這個JSON獲取聯繫人列表的最佳實踐的正確方向。

JSON結構如下所示。

{ 
    "status": true, 
    "error_code": "", 
    "error_message": "", 
    "data": { 
     "693": { // Contact obj, always the same as contact_id 
      "contact_id": "693", 
      // removed lots of properties for brevity 
      "real_name": "Mike Hunt", 
      "telephone": "01280845867", 
      "email": "[email protected]" 
     }, 
     "767": { 
      "contact_id": "767", 
      "real_name": "Peter File", 
      "telephone": "02580845866", 
      "email": "[email protected]" 
     } 
    } 
} 

類結構

[Serializable()] 
[DataContract] 
public class RootObjectClass 
{ 
    [DataMember()] 
    public bool status { get; set; } 
    [DataMember()] 
    public string error_code { get; set; } 
    [DataMember()] 
    public string error_message { get; set; } 
    [DataMember()] 
    public DataClass data { get; set; } 
} 
[Serializable()] 
[DataContract] 
public class DataClass 
{ 
    [DataMember] 
    public Contact contact { get; set; } 
} 
+0

反序列化'動態'數據類型。然後,你可以很容易地訪問它的屬性 –

+0

好吧,謝謝,將看看 – PurpleSmurph

+0

你不需要'RootObjectClass'中的'DataClass'數組嗎? – Richard

回答

2

你可以反序列化data屬性設置爲dictionary

[Serializable()] 
[DataContract] 
public class RootObjectClass 
{ 
    [DataMember()] 
    public bool status { get; set; } 
    [DataMember()] 
    public string error_code { get; set; } 
    [DataMember()] 
    public string error_message { get; set; } 
    [DataMember()] 
    public Dictionary<string,Contact> data { get; set; } 
} 

然後你可以選擇這樣的接觸:

var contacts = rootObject.data.Values.ToList(); 
+0

將嘗試,謝謝你的建議。 – PurpleSmurph

+0

是的!我的上帝,盯着我的臉,謝謝你! – PurpleSmurph