2012-11-26 42 views
152

Tôi có biến sau đây thuộc loại {Newtonsoft.Json.Linq.JArray}.Chuyển đổi Newtonsoft.Json.Linq.JArray thành một danh sách các loại đối tượng cụ thể

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

]} 

Những gì tôi muốn đạt được là để chuyển đổi này để List<SelectableEnumItem> nơi SelectableEnumItem là các loại sau đây:

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

Tôi thay ner để lập trình và tôi không chắc chắn liệu điều này là có thể. Bất kỳ trợ giúp với ví dụ làm việc sẽ được đánh giá rất nhiều.

Trả lời

309

Chỉ cần gọi array.ToObject<List<SelectableEnumItem>>(). Nó sẽ trả lại những gì bạn cần.

Tài liệu: Convert JSON to a Type

+0

Hãy chắc chắn nét lớp học của bạn bao gồm một constructor parameterless – Faust

+0

Vì vậy, làm thế nào để xử lý nếu mảng có một trường null? Thời gian này tôi nhận được lỗi JsonSerializationException.Tôi muốn t anh ta dữ liệu và tôi muốn nó vẫn còn null cho bất kỳ dữ liệu null. – nsarchar

+1

@nsarchar Bạn đã kiểm tra xem tài sản của bạn có bị vô hiệu không? – Jannik

28

Ví dụ trong câu hỏi là một trường hợp đơn giản nơi tên thuộc tính phù hợp chính xác trong json và trong mã. Nếu tên thuộc tính không khớp chính xác, ví dụ: bất động sản trong json là "first_name": "Mark" và tài sản trong mã là FirstName sau đó sử dụng Select method như sau

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

Hãy cho biết mã này nhận giá trị đầu tiên từ câu trả lời của tôi nhưng tôi có nhiều giá trị như thế nào tôi có thể nhận được tất cả các giá trị. Nhưng tôi chỉ cần có một giá trị mà tôi có nghĩa là có một tên và họ trong phản hồi. tôi làm thế – tpbafk

2

tôi có thể nghĩ ra phương pháp khác nhau để đạt được cùng

IList<SelectableEnumItem> result= array; 

hoặc (i đã có một số tình huống mà này một người không hoạt động tốt)

var result = (List<SelectableEnumItem>) array; 

hoặc sử dụng phần mở rộng LINQ

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

hoặc

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

hoặc explictly hơn

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

hãy chú ý trong giải pháp trên tôi đã sử dụng Object động

tôi có thể nghĩ ra một số giải pháp nữa mà là sự kết hợp của trên các giải pháp. nhưng tôi nghĩ nó bao gồm hầu như tất cả các phương pháp có sẵn trên mạng.

Bản thân tôi sử dụng giá trị trả về một

0

API đầu tiên trong trường hợp của tôi như thể hiện ở đây:

{ 

"pageIndex": 1, "PageSize": 10, "TOTALCOUNT": 1, "totalPageCount": 1, "mặt hàng": [{ "firstName": "Stephen", "otherNames": "Ebichondo", "PhoneNumber": "254.721.250.736", "giới tính": 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 ": false, "hasNextPage": false }

việc chuyển các mảng mục vào danh sách các khách hàng đã được xử lý như thể hiện ở đây:.

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); 
     } 
Các vấn đề liên quan