2017-12-21 2 views
1

Ich versuche, eine json für meine Klassenstruktur deserialisierenBenutzerdefinierte Deserialisierung mit Newtonsoft.json

Ich habe folgendes JSON:

{ 
    "Main": { 
     "Employees": { 
      "0": { 
       "FirstName": "Test ", 
       "LastName": "One" 
      }, 
      "1": { 
       "FirstName": "Test ", 
       "LastName": "Two" 
      } 
     } 
    } 
}  

Ich möchte es für die folgende Klassenstruktur deserialisieren:

public class Main 
{ 
    public List<Employee> Employees { get; set; } 
} 

public class Employee 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

Kann mir jemand vorschlagen, wie man einen Konverter für diese/jede andere Option schreibt, um dies zu erreichen?

+0

Wenn möglich versuchen, das JSON-Format zu ändern ... Wenn Mitarbeiter eine Sammlung ist, sollte es nicht als eine dargestellt werden? ? Gutes Design = (kann zu gutem Code führen). Schlechter Entwurf ..... nicht .. –

+3

Ich realisiere, dass Sie wahrscheinlich das JSON nicht entworfen haben, aber kann ich wählen, dass wir finden wer auch immer * dieses * Design entworfen hat, und ihnen den Fehler ihrer Weisen beibringen? –

+0

In [Json] (http://json.org/) wird eine Datei oder Liste als '[]' dargestellt, '[Elemente]' Mit Werten, die durch Kommas getrennt sind. –

Antwort

0

Ihr JSON ist etwas falsch. Sie haben einen Mitarbeitertyp mit den Feldern 0 und 1 erstellt, die beide die gleichen Untereigenschaften haben. Ich denke, was Sie eigentlich tun möchten, ist, Mitarbeiter zu einem Array zu machen.

{ 
"Main" : { 
    "Employees": [ 
     { 
      "FirstName": "Test ", 
      "LastName": "One" 
     }, 
     { 
      "FirstName": "Test ", 
      "LastName": "Two" 
     }] 
    } 
} 
+0

Nein, wie pro Anforderung, während Serialisierung ich absichtlich hinzugefügt den Listenindex als Knoten, ich bin in der Lage zu serialisieren, ich möchte eine haben Funktionalität zur Deserialisierung derselben. –

1

Offensichtlich ist die ideal Sache wäre anders, JSON zu haben, von (einem Array) zu arbeiten, aber das ist nicht möglich sein könnte.

Diese verwendet nicht die benutzerdefinierte Deserialisierung Optionen, aber - es funktioniert:

dynamic root = Newtonsoft.Json.JsonConvert.DeserializeObject(json); 
Newtonsoft.Json.Linq.JObject emps = root.Main.Employees; 
var list = new List<Employee>(); 
foreach(var child in emps.Properties()) 
{ 
    list.Add(child.Value.ToObject<Employee>()); 
} 
Verwandte Themen