2012-11-26 25 views
152

Aşağıdaki değişken türünde {Newtonsoft.Json.Linq.JArray} var.Newtonsoft.Json.Linq.JArray öğesinin belirli bir nesne türüne dönüştürülmesi

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

Doğrusu programlamaya ner ve ben bu mümkün olup olmadığından emin değilim: SelectableEnumItem şu tip nerede olduğunu başarmak istiyorum ne

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

]} 

List<SelectableEnumItem> bu dönüştürülmesidir. Çalışma örneğiyle ilgili herhangi bir yardım büyük takdir edilecektir.

cevap

309

Yalnızca array.ToObject<List<SelectableEnumItem>>() yöntemini arayın. İhtiyacın olanı geri getirecek.

Dokümantasyon: Söz konusu Convert JSON to a Type

+0

sınıf tanımının bir parametresiz yapıcı içerdiğinden emin olun – Faust

+0

Yani dizi boş bir alan varsa nasıl ele alınır? Bu sefer JsonSerializationException hatayı alıyorum. o verileri ve boş veri için null kalmasını istiyorum. – nsarchar

+1

@nsarchar Mülkünüzün null olduğunu kontrol ettiniz mi? – Jannik

28

örnek özellik adları tam olarak json ve kodunda eşleşen basit bir durumdur. Mülk adları tam olarak eşleşmiyorsa, ör. json mülk "first_name": "Mark" ve kod mülkiyet sonra FirstName olduğunu

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

Bu kod benim cevabımdan ilk değeri almakla ama çok değerim var, tüm değerleri nasıl alabilirim.Ama sadece bir değer almam gerekiyor demek istiyorum.Adımda bir ad ve soyadı var. Sadece ilk isim almak istiyorum nasıl ben bunu yaparım ? – tpbafk

2

aynı

IList<SelectableEnumItem> result= array; 

ulaşmak için farklı bir yöntemle aklınıza şöyle Select method kullanabilir veya (ben bu bazı durum vardı bir

var result = (List<SelectableEnumItem>) array; 

veya kullanım linq uzantısı) de işe yaramadı

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

veya

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

veya daha fazla explictly

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

Ben

Yukarıda birleşimidir biraz daha çözümlerin düşünebiliriz dinamik Nesne kullanılan yukarıdaki çözeltide dikkat edin

çözümleri. ama bence oradaki tüm mevcut yöntemleri kapsar.

{ 

"pageIndex": 1, "pageSize": 10, "totalCount" burada gösterildiği gibi

Kendimi ben benim durumumda ilki

0

API dönüş değeri kullanın: 1, "totalPageCount": 1, "ürün": [ { "firstName": "Stephen", "otherNames": "Ebichondo", "phoneNumber": "254721250736", "cinsiyet": 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': burada gösterildiği gibi müşteri listesine öğeler dizinin dönüşüm ele alındığı

yanlış }

.

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); 
     } 
İlgili konular