2012-11-26 14 views
152

की सूची में Newtonsoft.Json.Linq.JArray कनवर्ट करें मेरे पास निम्न प्रकार {Newtonsoft.Json.Linq.JArray} है।विशिष्ट ऑब्जेक्ट प्रकार

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

मैं नहीं बल्कि प्रोग्रामिंग करने के लिए नेर हूँ और मुझे यकीन है कि क्या यह संभव है नहीं कर रहा हूँ:

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

]} 

क्या मैं करना चाहते List<SelectableEnumItem> में बदलने के लिए जहां SelectableEnumItem निम्न प्रकार है। काम करने वाले उदाहरण के साथ किसी भी मदद की सराहना की जाएगी।

उत्तर

309

बस array.ToObject<List<SelectableEnumItem>>() विधि पर कॉल करें। यह आपको वापस लौटाएगा जो आपको चाहिए।

प्रलेखन: Convert JSON to a Type

+0

सुनिश्चित करें कि आपके वर्ग परिभाषा एक parameterless निर्माता शामिल हो – Faust

+0

तो अगर सरणी के पास शून्य क्षेत्र है तो कैसे संभालें? इस बार मुझे त्रुटि JsonSerializationException मिलती है। मुझे टी चाहिए वह डेटा और मैं चाहता हूं कि यह किसी भी शून्य डेटा के लिए शून्य न हो। – nsarchar

+1

@nsarchar क्या आपने जांच की है कि आपकी संपत्ति शून्य है? – Jannik

28

उदाहरण सवाल में एक सरल मामले में जहां संपत्ति के नामों का सटीक json में और कोड में मिलान है। अगर संपत्ति के नाम बिल्कुल मेल नहीं खाते हैं, उदा। json में संपत्ति "first_name": "Mark" और कोड में संपत्ति तो FirstName है के रूप में इस प्रकार है

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

महोदय इस कोड को मेरी प्रतिक्रिया से पहला मूल्य मिल रहा है लेकिन मेरे पास बहुत सारे मूल्य हैं, मैं सभी मूल्य कैसे प्राप्त कर सकता हूं। लेकिन मुझे केवल एक मूल्य प्राप्त करने की आवश्यकता है, मेरा मतलब है कि प्रतिक्रिया में पहला नाम और अंतिम नाम है। मैं केवल पहला नाम प्राप्त करना चाहता हूं मैं ऐसा करता हूँ ? – tpbafk

2

मैं अलग तरीके के बारे में सोच सकते हैं एक ही

IList<SelectableEnumItem> result= array; 

प्राप्त करने के लिए Select method का उपयोग करें या (मैं यह है कि कुछ स्थिति थी एक अच्छी तरह से काम नहीं किया)

var result = (List<SelectableEnumItem>) array; 

या उपयोग LINQ विस्तार

+०१२३५१६४१०६१
var result = array.CastTo<List<SelectableEnumItem>>(); 

या

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

या अधिक explictly

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

कृपया ऊपर दिए गए समाधान मैं गतिशील वस्तु इस्तेमाल किया

मैं कुछ और अधिक समाधान है कि इसके बाद के संस्करण के संयोजन कर रहे हैं के बारे में सोच सकते हैं में ध्यान देना समाधान की। लेकिन मुझे लगता है कि इसमें लगभग सभी उपलब्ध विधियों को शामिल किया गया है।

{ 

"pageIndex":: 1, "pageSize": 10, "TOTALCOUNT"

मैं स्वयं मैं जैसा कि यहाँ दिखाया मेरे मामले में पहले एक

0

एपीआई वापसी मान का उपयोग करें: 1, "totalPageCount": 1, "आइटम" [ { "firstName": "स्टीफन", "otherNames": "Ebichondo", "PhoneNumber": "254,721,250,736", "लिंग": 0, "क्लाइंटस्टैटस": 0, "डेटऑफबर्थ": "1 979-08-16T00: 00: 00", "राष्ट्रीय आईडी": "21734397", "ईमेल एड्रेस": "सेबिचोंडो @ जीमेल।कॉम ", " आईडी ": 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); 
     } 
संबंधित मुद्दे