2012-11-26 1471 views
152

我有以下變量類型{Newtonsoft.Json.Linq.JArray}將Newtonsoft.Json.Linq.JArray轉換爲特定對象類型的列表

properties["Value"] {[ 
    { 
    "Name": "Username", 
    "Selected": true 
    }, 
    { 
    "Name": "Password", 
    "Selected": true 
    } 

]} 

我要完成什麼是將此轉換爲List<SelectableEnumItem>,其中SelectableEnumItem是以下類型:

public class SelectableEnumItem 
    { 
     public string Name { get; set; } 
     public bool Selected { get; set; } 
    } 

我比較NER編程,我不知道這是否是可能的。任何工作示例的幫助將不勝感激。

回答

309

只需撥打array.ToObject<List<SelectableEnumItem>>()方法即可。它會返回你所需要的。

文檔:Convert JSON to a Type

+0

請確保您的類定義包括參數的構造函數 – Faust

+0

那麼如何處理數組是否有空字段呢?這次我得到錯誤JsonSerializationException,我想要t他的數據,我希望它保持空任何空數據。 – nsarchar

+1

@nsarchar你檢查過你的房產是否可以空? – Jannik

28

的例子中的問題是一個簡單的情況下屬性名稱恰好JSON和代碼匹配。如果屬性名稱不完全匹配,例如在JSON屬性是"first_name": "Mark"和代碼屬性是FirstName然後使用Select method如下

List<SelectableEnumItem> items = ((JArray)array).Select(x => new SelectableEnumItem 
{ 
    FirstName = (string)x["first_name"], 
    Selected = (bool)x["selected"] 
}).ToList(); 
+0

先生這段代碼從我的回覆中獲得第一個值,但我有很多值我怎樣才能獲得所有values.But我只需要得到一個值,我的意思是有一個名字和姓氏在作出迴應。我想只是名字怎麼可以我那樣做? – tpbafk

2

我能想到不同的方法來達到同樣的

IList<SelectableEnumItem> result= array; 

或(我有一些情況,這一個沒有很好地工作)

var result = (List<SelectableEnumItem>) array; 

或使用LINQ擴展

var result = array.CastTo<List<SelectableEnumItem>>(); 

var result= array.Select(x=> x).ToArray<SelectableEnumItem>(); 

以上的顯式

var result= array.Select(x=> new SelectableEnumItem{FirstName= x.Name, Selected = bool.Parse(x.selected) }); 

請注意在我使用的動態對象

我能想到的一些解決方案,上述組合的上述溶液解決方案。但我認爲它涵蓋了幾乎所有可用的方法。

自己,我用我的情況下,第一個

0

API返回的值如下所示:

{ 

「的PageIndex」:1, 「的pageSize」:10, 「TOTALCOUNT」: 1, 「totalPageCount」:1, 「物品」:[{ 「名字」: 「泉」, 「otherNames」: 「Ebichondo」, 「phoneNumber的」: 「254721250736」, 「性別」: 0, 「clientStatus」:0, 「dateOfBirth」:「1979-08-16T00:00:00」, 「nationalID」:「21734397」, 「emailAddress」:「sebichondo @ gmail。COM 「 」ID「:1, 」addedDate「: 」2018-02-02T00:00:00「, 」modifiedDate「: 」2018-02-02T00:00:00「 } ], 」 hasPreviousPage「:假的, ‘hasNextPage’:假 }

項目陣列的客戶名單的轉化率進行處理,如下所示:

if (responseMessage.IsSuccessStatusCode) 
     { 
      var responseData = responseMessage.Content.ReadAsStringAsync().Result; 
      JObject result = JObject.Parse(responseData); 

      var clientarray = result["items"].Value<JArray>(); 
      List<Client> clients = clientarray.ToObject<List<Client>>(); 
      return View(clients); 
     }