2012-11-26 3 views
152

Ich habe die folgende Variable des Typs {Newtonsoft.Json.Linq.JArray}.Konvertieren Newtonsoft.Json.Linq.JArray in eine Liste von bestimmten Objekttyp

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

]} 

Was ich erreichen will, ist dies List<SelectableEnumItem> zu konvertieren, wo SelectableEnumItem der folgende Typ ist:

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

Ich bin eher ner zu Programmierung und ich bin nicht sicher, ob dies möglich ist. Jede Hilfe mit Arbeitsbeispiel wird sehr geschätzt.

Antwort

309

Rufen Sie einfach array.ToObject<List<SelectableEnumItem>>() Methode. Es wird zurückgeben, was Sie brauchen.

Dokumentation: Convert JSON to a Type

+0

sicher, dass Ihre Klasse Definition einen parameterlosen Konstruktor enthält – Faust

+0

Also, wie behandelt, wenn das Array ein Nullfeld hat? Dieses Mal erhalte ich den Fehler JsonSerializationException.Ich will t Die Daten und ich wollen, dass sie Null für alle Null-Daten bleiben. – nsarchar

+1

@nsarchar Haben Sie überprüft, dass für Ihre Unterkunft eine Nullbelastung möglich ist? – Jannik

28

Das Beispiel in der Frage ist ein einfacher Fall, in dem die Eigenschaftsnamen angepasst genau in json und im Code. Wenn die Eigenschaftsnamen nicht genau übereinstimmen, z. Immobilien in json "first_name": "Mark" und die Eigenschaft in Code ist FirstName verwendet dann die Select method als

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

Sir dieser Code bekommt den ersten Wert von meiner Antwort, aber ich habe viele Werte, wie bekomme ich alle Werte. Aber ich brauche nur einen Wert zu bekommen, ich meine, es gibt einen Vornamen und Nachnamen in Antwort. Ich möchte nur Vorname wie bekommen können ich mach das ? – tpbafk

2

folgt ich von verschiedenen Verfahren denken kann die gleichen

IList<SelectableEnumItem> result= array; 

oder (ich hatte einige Situation, dass dies zu erreichen, ein funktionierte nicht gut)

var result = (List<SelectableEnumItem>) array; 

oder Verwendung Linq Erweiterung

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

oder

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

oder mehr explictly

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

bitte Aufmerksamkeit in obiger Lösung bezahle ich dynamisches Objekt

verwendet wird, kann ich von einigen mehr Lösungen denken, die Kombinationen von oben sind Lösungen. aber ich denke, es deckt fast alle verfügbaren Methoden da draußen ab.

Myself verwende ich den ersten

0

Die API Rückgabewert in meinem Fall wie hier gezeigt:

{ 

"pageindex": 1, "pagesize": 10, "totalcount": 1, "totalPageCount": 1, "Artikel": [{ "firstname": "Stephen", "Othernames": "Ebichondo", "phonenumber": "254721250736", "Geschlecht": 0, "clientStatus": 0, "dateOfBirth": "1979-08-16T00: 00: 00", "nationalID": "21734397", "E-Mail-Adresse": "Sebichondo @ Gmail.com " "id": 1, "addedDate": "2018-02-02T00: 00: 00" "ModifiedDate": "2018-02-02T00: 00: 00" } ], " hasPreviousPage ": false, "hasNextPage": false }

die Umwandlung der Elemente Array Liste der Kunden behandelt wurde, wie hier gezeigt.

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); 
     } 
Verwandte Themen