2017-02-08 3 views
0

Ich verwende das Newtonsoft JSON.NET-Paket.Wie JSON-Objekt [] [] zu einer Liste deserialisieren <SomeObject>

Der JSON, mit dem ich arbeite, hat eine verschachtelte Eigenschaft, die standardmäßig zu einem Objekt [] [] deserialisiert. So zum Beispiel haben Sie so etwas wie dieses:

[ 
    ["George", "Washington", "555-555-1234", 47], 
    ["Ronald", "Mcdonald", "555-222-3333", 50], 
    ["Sterling", "Archer", "234-567-8901", 30] 
] 

Und sagen, dass ich eine Person Klasse erstellt haben

public class Person{ 

    public string FirstName { get; set;} 
    public string LastName { get; set;} 
    public string Phone{ get; set;} 
    public int Age{ get; set;} 
} 

Wie Deserialisieren ich das Objekt [] [], um eine schöne, einfache Liste zu verwenden, von Personenobjekte?

+0

zu bekommen Wie sieht Ihr JSON aussieht ?? –

+0

Es gibt keinen einfachen Weg, aber eine Möglichkeit besteht darin, zu einer 'Liste ' zu deserialisieren, dann iterieren Sie durch Zuweisen von Werten basierend auf dem Index (vorausgesetzt, das Format ist fest) –

Antwort

0

Nicht sicher, dass Sie in der Lage sein werden, aus der Box Deserialisierung ohne ein wenig basteln, da es nur einfache Arrays von string und nicht ein schön formatiert JSON Schlüssel/Paar. Dies ist, was ich tun würde:

public class Data 
{ 
    public List<List<string>> UserInfo {get;set;} 
    public List<Person> ToPersonList() 
    { 
     return UserInfo.Select(info=> new Person 
     { 
      FirstName = info[0], 
      LastName = info[1], 
      Phone = info[2], 
      Age = Convert.ToInt32(info[3]) 
     }); 
    } 
} 

Dann Newtonsoft Deserialize zu Data haben und dann Data.ToPersonList() rufen Sie Ihre Liste der Person

+0

Wie deserialisieren Sie über Daten mit Newtonsoft? –

+0

Newtonsoft JSON.NET - Wie von op im ersten Satz erwähnt – JohanP

0

diese Antwort Basierend off: Deserialization of Json without name fields:

Sie die JSON in eine Liste deserialisieren könnte, dann kann eine Mapper Funktion wie diese helfen:

public Person PersonMapper(string[] input) 
{ 
    return new Person { 
     FirstName = input[0], 
     LastName = input[1], 
     Phone = input[2], 
     Age = Convert.ToInt32(input[3]) 
    }; 
} 

Natürlich ist diese Funktion, um die Reihenfolge der Indizes übernimmt und fields ist immer 0, 1, 2, 3 und prüft nicht auf Fehlerfälle.

0
 var array = new object[3][]; 
     array[0] = new object[4] { "George", "Washington", "555-555-1234", 47 }; 
     array[1] = new object[4] { "Ronald", "Mcdonald", "555-222-3333", 50 }; 
     array[2] = new object[4] { "Sterling", "Archer", "234-567-8901", 30 }; 

     var list = new List<Person>(); 
     foreach (var r in array) 
      list.Add(new Person() { FirstName = (string)r[0], LastName = (string)r[1], Phone = (string)r[2], Age = int.Parse((string)r[3]) }); 
Verwandte Themen